正则表达式:查看一个字符串是否与我们所设定的字符串相匹配;快速检索文本,实现一些替换文本的操作。
import re
a='asd-dfa-ggr'
r=re.findall('asd',a)
print(r)
元字符
\d表示数字0-9 \D匹配非数字
\w全部数字和字母和下划线_ \W非单词字符空格啊换行啊\n\t等
\s空白字符
.匹配除换行符\n之外的其他所有字符
a='efav6varsvsd8vafrva7vrvsfv9rev0'
r=re.findall('[^0-9]',a) # 找出所有非数字 ^非
t=re.findall('\D',a) # r,t作用相同
print(r)
print(t)
匹配月份
a='1884年11月'
r=re.findall('\d{1,2}月',a) #最小是1,最大是12,{}限定匹配个数,1位数或2位数,所以1,2
print(r)
正则匹配字符集
a='aad,abd,acd,add,aed,afd,agd,ahd'
r=re.findall('a[a-e]d',a) # 匹配两边是ad,中间是a-e的全部字符
print(r)
贪婪与非贪婪
a='python 2342java453php'
r=re.findall('[a-z]{3,6}',a) # 默认贪婪
print(r)
a='python 2342java453php'
r=re.findall('[a-z]{3,6}?',a) # ?非贪婪,3,6按照3找,找到3个就满足
print(r)
符号* 匹配*前面的字符0次或者无限多次
符号+ 匹配+前面的字符1次或者无限多次
符号?匹配*前面的字符0次或者1次
符号?前面如果是一个区间,则改为非贪婪,如果是一个确定的数,则改为匹配0次或者1次*
a='pytho231python353pythonn32'
r1=re.findall('python*',a)
r2=re.findall('python+',a)
r3=re.findall('python?',a)
r4=re.findall('python{1,2}?',a) # 变成非贪婪,前面只出现一次就停止
print(r1)
print(r2)
print(r3)
print(r4)
边界匹配符: ^前边界匹配 $后边界
a='100000234'
r=re.findall('^[0-9]{4,7}$',a)
print(r)
组
a='pythonpythonpythonpythonpythonpython'
r=re.findall('(python){2}',a)
print(r)
上述代码结果为:[‘python’, ‘python’, ‘python’] 意思是有三组2个的python 即pythonpython这样有三组 所以输出三个python
re.I使.忽略大小写
re.S .能匹配除\n之外所有字符,即re.S使.能匹配\n
a='pythonc#\njava'
r=re.findall('C#.',a,re.I|re.S) # 能匹配出c#和\n
print(r)