2019年5月25日 re模块
正则表达式 可以做 字符串 模糊匹配.
普通字符:大多数自负和字母都会和自身匹配
元字符:.^$*+?{}[]|()\
. 是通配符 除了\n 换行符 不能代替
^ 是只能从开头进行匹配
$是从结尾开始匹配
*是匹配0到无穷次
+是匹配1到无穷次
?是匹配0到1次
{}是匹配次数自己指定
*?后面加了一个?代表变成惰性匹配,最小匹配
[]代表 或 作用
[]中c没有特殊符号,eg如果里面有*,那就是个普通*
在字符集中有特殊功能的符号是 -^\
[]中有个^ 代表 非 作用
\ 代表转义
反斜杠后面跟元字符 去除特殊功能 比如\.
反斜杠 后面跟普通字符实现特殊功能
\d 类似于[0-9] 匹配任何十进制数
\D 相当于[^0-9] 匹配非数字字符
\s 匹配任何空白字符 [\t\n\r\f\v]
\S 匹配任何非空白字符 [^\t\n\r\f\v]
\w 匹配任何字母数字字符 [a-zA-Z0-9]
\W 匹配任何非字母数字字符 [^a-zA-Z0-9]
\b 匹配一个特殊字符边界 比如 空格,&,#等
import re ret=re.findall('a...x','a123xa122344xa323xxxa')#模糊匹配 print(ret) ret2=re.findall('\d+','ab2ra32323aadfa44')#\d 寻找数字,进行匹配 print(ret2) ret3=re.findall('^a...x','afadxdfkadl;fakdxx;a')#从开头开始进行匹配 print(ret3) ret4=re.findall('a..x$','akalfjadfa23x')# $是从结尾开始处匹配 print(ret4) ret5=re.findall('d*','afaddddddsasaafdfaddddddaadaddf') print(ret5)#*代表0到~无穷次 ret6=re.findall('alex+','adfadalexxxx4434adfak')#+代表1到无穷次 print(ret6) ret7=re.findall('alex*','adfadfaleadfadfa')#*能代表0所以可以没有x,+就不行 print(ret7) ret8=re.findall('alex?','afalexxxxxxxx')#?将x匹配0~1次, print(ret8) ret9=re.findall('alex{6}','akldalexxxxxxx')#重复6次 ret10=re.findall('alex{0,5}','alexxdxx')#重复0到5次 print(ret9,ret10) ret11=re.findall('alex*?','adfadfaleadfadfa')# *多加了一个?变成惰性匹配,就是代表最小匹配 print(ret11)
>>>
['a123x', 'a323x']
['2', '32323', '44']
['afadx']
['a23x']
['', '', '', 'dddddd', '', '', '', '', '', '', 'd', '', '', 'dddddd', '', '', 'd', '', 'dd', '', '']
['alexxxx']
['ale']
['alex']
['alexxxxxx'] ['alexx']
import re ret12=re.findall('x[yz]p','xypadfadfaxzp')#[]代表或作用 print(ret12) ret13=re.findall('q[a-z]','qadfadfqdfadfaeqddaas')#- 代表返回,这里代表26个字母 print(ret13) ret14=re.findall('q[a-z]*','qabcrdd9')# 后面加个*代表a-z 重复0到无穷次 print(ret14) ret15=re.findall('q[^a-z]*','q4444abcrdd9')# d代表的是 非,除了a-z以外 print(ret15) ret16=re.findall('\([^()]*\)','12+(4-5*(4-2))')#首先用[^]取非的方法,取出括号内不含其他括号的元素然后用*取多个 print(ret16) #\ 功能代表转义
》》》
['xyp', 'xzp']
['qa', 'qd', 'qd']
['qabcrdd']
['q4444']
['(4-2)']