正则表达式的规则:
基本正则:
区间匹配 []:可以根据编码顺序来规定范围
A:65 a:97 Z:90 z:122
re.findall(r"[pP]ython","Python or python")的匹配结果包括python 和 Python
[]里面的内容表示里面内容任选一个
一个一个字符从左往右依次匹配 匹配成功就扔进列表
也可以这么用[A-Za-z]表示大写字母和小写字母 也可以[A-z]
区间取反:
re.findall(r"^[pP]ython","Python or python")
前面表示p或者P接一个ython
匹配或:
re.findall(r"python|Python","Python or python")
匹配python和Python
占位符:表示除\n之外的任意一个字符
re.findall(r"p.thon","Python or python")
匹配p*thon
匹配开始与结束 (^ $):
re.findall(r"^python","Python or python")
表示匹配字符串开头为python
re.findall(r"python$","Python or python")
表示匹配字符串结尾为python
正则表达式的快捷方式:
使用ppt的截图
\w:里面包括中文字符,大小写和下划线
一次一个\d表示只匹配一个数字
\b:只是表示词边界 不代表任何字符 表示那个地方前面必须不是一个单词字符(给陈的截图)
如print(re.findall(r'\bw','agad#wwwwad'))输出w
\B:表示非词边界 表示词边界那个地方前面是个单词字符
正则重复:
通配符: * ? +
? 表示匹配前一项0次或1次
如 ret=re.findall(r'py?','python p pyy ps') 表示y出现0次或1次 结果是[py,p,py,p]
+ 表示匹配前一项一次以上
如 ret=re.findall(r'py+','python p pyy ps') 表示y出现1次及以上 结果是[py,pyy]
* 表示匹配前一项任意次(0-n次)
如 ret=re.findall(r'py*','python p pyy ps') 表示y出现次数为0-n次 结果为[py,p,pyy,p]
{n,m} 表示匹配前一项n-m次
如 ret=re.findall(r'py{2,4}','python p pyy pyyy') 表示y出现次数为2-4次 结果为[pyy,pyyy]
{n} 表示匹配n次
如 ret=re.findall(r'py{2}','python p pyy pyyy') 明确表示y出现次数为2次 结果就为[pyy,pyy]
贪婪模式和非贪婪模式
贪婪模式 尽可能匹配到长的字符串 (不设置就默认)
非贪婪模式 匹配到就输出(在正则重复后面加?: +? *? {n,m}?等同于{n})
msg='cats and dogs,cats1 and dog1'
re.findall(r'cats.*s',msg)
re.findall(r'cats.*?s',msg)
结果:
['cats and dogs,cats']
['cats and dogs']
正则分组:
match对象的group函数 默认参数为0 表示输出匹配的所有字符串
参数n(n>0)表示输出第几个分组匹配到的内容
import re
msg='135-0960-5926'
ret=re.search(r'(\d{3})-(\d{4})-(\d{4})',msg)
print(ret.group()) 135-0960-5926
print(ret.group(1)) 135
print(ret.group(2)) 0960
print(ret.group(3)) 5926
print(ret.groups()) #('135', '0960', '5926') 将组里面的对象变成了一个元组里面的元素
分组向后引用:
捕获分组 --分组之后匹配到的数据都是暂时放在内存里,并且给定一个从1开始的索引
所以,捕获分组蚀刻液向后引用 \1 \2
msg='135-0960-0960'
ret=re.search(r'(\d{3})-(\d{4})-\2',msg) 这种能捕获上 因为\2表示0960
ret=re.search(r'(\d{3})-(\d{4})-\2',172-0960-5926) 这种不能捕获上 因为\2表示0960
非捕获分组
(?:然后加正则表达式)
只分组 不捕获 不会将捕获到的内容临时存放在内存 不能使用分组向后引用
msg='135-0960-0960'
ret=re.search(r'(?:\d{3})-(\d{4})-\1',msg) 这时候的\1是0960
如果有捕获分组,findall只会匹配显示捕获分组内容
import re
msg='135-0960-0960'
ret=re.findall(r'(?:\d{3})-(\d{4})-\1',msg)
print(ret) 只会输出 ['0960']
python suds python suds zeep
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
PythonPython
-
Python之FastAPI构建Python Web
FastAPI 构建高效的 Python Web
ico Python 服务器 -
python调用webservice方法suds
python发短信
分隔线 python -
Python3 通过 suds 访问 webservice
Python通过suds访问webservice本文描述了如何通过suds库访问webserv
Python xml webservice接口 -
android项目没有app目录
1. 重要目录文件:a) Src/:源代码目录b) Gen/:系统自动生成代码的目录c) &nb
android项目没有app目录 android xml 应用程序