day09-正侧表达式
while True:
phone_num = input('please input your phone_num:')
if len(phone_num) == 11 \
and phone_num.isdigit()\
and (phone_num.startswith('') \
or phone_num.startswith('') \
or phone_num.startswith('')):
print('号码正确')
break
else:
print('号码错误') python操作正则表达式要使用re模块。re模块包含的函数:findall,search,match,sub,subn,compile,split,finditer
findall和split把匹配结果放在列表里面。search,match,finditer调用group才能取到结果。
1.findall:
import re
ret = re.findall('a','eva agon yuan') #结果['a', 'a', 'a'],将后面待匹配的字符串跟‘a’匹配,把所有满足条件的结果放在列表里面。
print(ret)
ret1 = re.findall('[a-z]+','eva agon yuan') #['eva', 'agon', 'yuan']
print(ret1)
ret2 = re.findall('[a-z]*','eva agon yuan') #['eva', '', 'agon', '', 'yuan', '']#待匹配的字符串里面的空白符跟[a-z]*匹配了0次。所以结果有空白字符串。空白符可以跟*号和?号匹配0次。
print(ret2)
import re
def idcheck(idc):
ret = re.findall('^[1-9]\d{14}(\d{2}[0-9x])?$',idc) #身份证为15位数字或18位数字或17位数字加X.
if ret:
print('匹配成功')
else:
print('匹配失败')
idcheck('111111111111111111')
2.search:
import re
ret = re.search('a','eva qgon yuqn') #从前往后,找到第一个就返回。
if ret: #如果找到,则返回的变量为True,调用group就可以拿到结果。如果没有找到,返回None。结果是a
print(ret.group()) #a
ret1 = re.search('a','ev1 qgon yuqn').group() #如果没有找到,并且没有使用if语句,就会报错。所以上面程序是常用格式。
print(ret1) 3.match: import re
ret = re.match('a','abc') #从第一个字符开始匹配。
if ret: print(ret.group()) #a 4.sub: import re
ret = re.sub('\d','@','4ew 5her hsdfgh5 shsr56hserh',10) #@ew @her hsdfgh@ shsr@@hserh ,数字替换成@,重复10次。如果不输入重复次数,默认匹配任意多次。
print(ret) 5.subn: import re ret = re.subn('\d','@','4ew 5her hsdfgh5 shsr56hserh') #('@ew @her hsdfgh@ shsr@@hserh', 5) ,数字替换成@,返回元组,元组第一个元素是替换的结果,第二个元素是替换的次数。
print(ret) 6.complie:把正侧编译成对象,适用于这个正侧重复使用,并且待匹配的字符串特别长的情况。
import re
obj = re.compile('\d+')
ret = obj.findall('ad54646ae4g awe646gaa4eg 6a4g') #['54646', '4', '646', '4', '6', '4']
print(ret) 7.split: 分割结果是列表。
import re
ret = re.split('[ab]','fgiaklbjklae ajbag')#['fgi', 'kl', 'jkl', 'e ', 'j', '', 'g']
print(ret)
ret1 = re.split('[ab]', 'abcd') # 先按'a'分割得到''和'bcd',再对''和'bcd'分别按'b'分割
print(ret1) # ['', '', 'cd'] 8.finditer:返回一个迭代器。节省内存。
import re
ret = re.finditer('\d+','agejlaw54564g4e')
print([i.group() for i in ret]) #['54564', '4']
9.findall的优先级:
ret8 = re.findall('www.(baidu|laonanhai).com','www.laonanhai.com') #['laonanhai']。findall优先把组里的匹配结果返回。
print(ret8)
ret8 = re.findall('www.(?:baidu|laonanhai).com','www.laonanhai.com') #['www.laonanhai.com']。(?:)取消优先级。
print(ret8)
10.split的优先级:
ret9 = re.split('\d','jg2jsa3gj') #['jg', 'jsa', 'gj'],没有保留分割的字符。
print(ret9)
ret10 = re.split('(\d)','jg2jsa3gj') #['jg', '2', 'jsa', '3', 'gj'],加了组,保留分割的字符。对于某些需要保留分割字符的地方是很重要的。
print(ret10)
day09-正侧表达式的更多相关文章
- php正规则表达式的语法
界定符的三种书写方式: regexpal工具(正规则表达调试工具): 可以实时显示效果出来. 原子: 可见原子,即uincode编码表中的某个字符 不可见原子: 为了避免编码问题导致匹配不正确,要把文 ...
- C# 正规则表达式
获取括号里的内容 public string GetRegexStr(string Str, string Symbol1, string Symbol2, bool needSymbol) { ]; ...
- php正规则表达式学习笔记(几个常用函数的区别)
preg_mache()函数和 preg_mache_all()函数的区别: preg_mache()只会匹配规则中的字符一次, preg_mache_all()会匹配符合条件的所有字符! 例子对比: ...
- python列表解析和正同表达式
正则表达式 [i for i in ['1232','233','22'] if re.match('^233$', i)] return ['233']
- find和grep的区别
find命令:在系统当中搜索符合条件的文件名,如果需要匹配,使用通配符匹配,通配符是完全匹配. grep命令:在文件当中搜索符合条件的字符串,如果需要匹配,使用正侧表达式匹配 正侧表达式是包含匹配.
- 意外作出了一个javascript的服务器,可以通过js调用并执行任何java(包括 所有java 内核基本库)及C#类库,并最终由 C# 执行你提交的javascript代码! 不敢藏私,特与大家分
最近研发BDC 云开发部署平台的数据路由及服务管理器意外作出了一个javascript的服务器,可以通过js调用并执行任何java(包括 所有java 内核基本库)及C#类库,并最终由 C# 执行你提 ...
- python3 爬淘女郎
刚学到python 组合数据类型这里,机缘巧合之下得到了一个公开课的视频,也看了前辈写的,取其精华,去其糟粕的爬了一下: import urllibfrom urllib import request ...
- Java程序设计概述
摘要:1996年Java第一次发布就引起了人们的广大关注.本文简要地介绍一下Java语言的发展历史. 一.Java程序设计平台 Java是一种优秀的程序设计语言.一旦一种语言应用于某个领域,与现存代码 ...
- JavaScript 替换所有匹配内容
由于JavaScript 的 replace 只能替换一次,因此另外编写一个能现替换全部匹配内容方法,代码如下: /*把 content 中所有的 searchValue 替换为 replaceVal ...
随机推荐
- python 简单字符串字典加密
1 def crypt(source,key): from itertools import cycle result='' temp=cycle(key) for ch in source: res ...
- android手机客户端测试-思考方向
来源公开课!!! 1.冒烟测试 Monkey 工具 目标:1.编写adb.exe的Monkey命令. 2.通过logcat定位问题,保证软件的健壮性. 2.安装.卸载测试 2.1 手机 ...
- java中执行javascript案例
Nashorn js engine官方文档 https://docs.oracle.com/javase/7/docs/technotes/guides/scripting/programmer_gu ...
- UVA 12657/COJ 1329 HN第九届省赛 链表模拟
因为最近学了Splay,刚看到这个题目总共四种操作,把某个数移到另一个数的左边 或者右边 交换两个数 翻转整个序列,马上想到用Splay,因为总点数和总操作数都为10^5,如果用Splay把操作优化到 ...
- 干货 | 快速实现数据导入及简单DCS的实现
干货 | 快速实现数据导入及简单DCS的实现 原创: 赵琦 京东云开发者社区 4月18日 对于多数用户而言,在利用云计算的大数据服务时首先要面临的一个问题就是如何将已有存量数据快捷的导入到大数据仓库 ...
- Numa解释
原路径:http://www.sohu.com/a/126402403_609500 内容概要 今天的文章我们将简单学习下Hyper-V如何通过NUMA(Non-Uniform Memory Acce ...
- solr集群的搭建
solrCloud 昨天随手写了个solr单机版的搭建,今天准备写一个solr集群的搭建!1.solr集群只要环境配置正确还是比较简单的环境:CentOS-6.4-i386-bin-DVD1.isoj ...
- 17.3.12--uillib模块
1---uillib是python标准库中最常用的一个python网络应用资源访问的模块,他可以让你像访问文本一样,读取网页的内容 它的作用是访问一些不需要验证的网络资源和cookie等 uillib ...
- 黑马IDEA版javaweb_2-2MySQL
今日内容 数据库的基本概念 MySQL数据库软件 安装 卸载 配置 SQL 数据库的基本概念 1. 数据库的英文单词: DataBase 简称 : DB 2. 什么数据库? * 用于存储和管理数据的仓 ...
- malloc 底层实现及原理
摘要:偶尔看到面试题会问到 malloc 的底层原理,今天就来记录一下,毕竟学习要“知其所以然”,这样才会胸有成竹. 注:下面分析均是基于 linux 环境下的 malloc 实现.步骤是:先总结结论 ...








