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 ...
随机推荐
- 每天一点点之数据结构与算法 - 应用 - 分别用链表和数组实现LRU缓冲淘汰策略
一.基本概念: 1.什么是缓存? 缓存是一种提高数据读取性能的技术,在硬件设计.软件开发中都有着非广泛的应用,比如常见的CPU缓存.数据库缓存.浏览器缓存等等. 2.为什么使用缓存?即缓存的特点缓 ...
- 三分钟入坑指北 🔜 Docsify + Serverless Framework 快速创建个人博客系统
之前由于学摄影的关系,为了提高自己的审美,顺便锻炼下自己的英文能力,翻译了不少国外艺术类的 文章.最近一直想搭一个个人博客来存放这些内容,又懒得折腾建站,遂一直搁置. 直到偶然发现了 docsify ...
- Mysql数据库忘记密码找回方法
Mysql数据库忘记密码找回 a 停止mysql服务 /etc/init.d/mysql stop b 使用--skip-grant-tables启动mysql,忽略授权登录验证 mysqld_saf ...
- Linux CMD 笔记 & 正则表达式
一.linux bash 1. 进程名查找kill ps -ef | grep xxxx| grep -v grep| cut -c 9-15 | xargs kill -9 2.端口号kill 占用 ...
- TX2Ubuntu16.04上安装 kinectV2
本文参考 https://www.ncnynl.com/archives/201706/1780.html 参考 https://blog.csdn.net/qq_33835307/arti ...
- 18 11 13 装了ssd 继续 网络通信 tcp 客户端的创建
import socket def main(): # 1. 买个手机(创建套接字 socket) 联通公司建立了一个信号塔 tcp_server_socket = socket.socket(soc ...
- Ubuntu编译protobuf
个人博客地址:http://www.bearoom.xyz/2019/08/24/ubunt-protobuf/ 因为编译了tensorflow C++的版本,然后提示protobuf的版本不对应引起 ...
- MJJ玩磁铁
题目: Problem D: MJJ玩磁铁 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 139 Solved: 9[Submit][Status][ ...
- C++内联函数作用及弊端
为什么要使用内联函数? 因为函数调用时候需要创建时间.参数传入传递等操作,造成了时间和空间的额外开销.C++追求效率所以引入了内联的概念. 通过编译器预处理,在调用内联函数的地方将内联函数内的语句Co ...
- Spring Bean的生命周期、Spring MVC的工作流程、IOC,AOP
1.Spring Bean的生命周期? (1)构造方法实例化bean. (2)构造方法设置对象属性. (3)是否实现aware接口,三种接口(BeanNameAware,BeanFactoryAwar ...