目录
一、正则化表达式语法
1、如下表格:
语法 | 意义 |
---|---|
. |
匹配除换行外的任意字符(如果DOTALL则连换行也匹配) |
^ |
匹配字符串开始 (如果MULTILINE,也匹配换行符之后) |
$ |
匹配字符串结束(如果MULTILINE,也匹配换行符之前) |
* |
匹配0 个或更多个由前面的正则表达式定义的片段,贪婪方式(尽可能多的匹配) |
+ |
匹配1 个或更多个由前面的正则表达式定义的片段,贪婪方式 |
? |
匹配0 个或1 个由前面的正则表达式定义的片段,贪婪方式 |
*?, +?,?? |
非贪婪版本的* , + , 和? (尽可能少的匹配) |
{m,n} |
匹配m 到n 次由前面的正则表达式定义的片段,贪婪方式 |
{m,n}? |
匹配m 到n 次由前面的正则表达式定义的片段,非贪婪方式 |
[…] |
匹配方括号内内的字符集中的任意一个字符 |
| |
等于“或” |
(…) |
匹配括号内的表达式,也表示一个组 |
/number |
匹配先前匹配过的组(通过序号,组自动从1 - 99编号) |
/A |
匹配字符串 开始 |
/b |
匹配单词 边界 |
/B |
匹配一个空串 (非单词边界) |
/d |
匹配任意数字 等价于[0-9] |
/D |
匹配任意非数字 等价于[^\d] |
/s |
匹配任意空白字符 |
/S |
匹配任意非空字符 |
/w |
匹配字母数字 |
/W |
匹配非字母数字 |
/Z |
匹配字符串结束 |
// |
匹配反斜杠 |
2、元字符
① . 通配符(除了 \n不能匹配,可以匹配其他任意一个字符)
② ^ 以该字符串开头
③ $ 以该字符串结尾
④ * 重复前一个字符,0~无穷次
⑤ + 重复前一个字符,1~无穷次在这里插入代码片
⑥ ? 匹配前一个字符,0~1个
⑦ { } 自定义重复范围,例:
{0,} 重复0~无穷次
{1,2} 重复1~2次
{6} 重复6次
注:默认上述元字符均为贪婪匹配,后面加 ?,变为惰性匹配
import re
v1 = re.findall("a..b", "baasbartb")
print(v1) # ['aasb', 'artb']
v2 = re.findall("^ba", "baasbartb")
print(v2) # ['ba']
v3 = re.findall("tb$", "baasbartb")
print(v3) # ['tb']
v4 = re.findall("a*", "baasbartb")
print(v4) # ['', 'aa', '', '', 'a', '', '', '', '']
v5 = re.findall("a+", "baasbartb")
print(v5) # ['aa', 'a']
v6 = re.findall("a?", "baasbartb")
print(v6) # ['', 'a', 'a', '', '', 'a', '', '', '', '']
v7 = re.findall("a{1,2}", "baasbartaaab")
print(v7) # ['aa', 'a', 'aa', 'a']
v8 = re.findall("a{1,2}?", "baasbartaaab")
print(v8) # ['a', 'a', 'a', 'a', 'a', 'a']
二、re模块常用方法
1、compile
将正则表达式的样式编译为一个 正则表达式对象 (正则对象),可以用于匹配,通过这个对象的方法 match(), search() 以及其他如下描述。
序列
co = re.compile("\d+")
v = co.findall("wded123fw54") # v = re.findall(co,"wded123fw54")也可以
print(v) # ['123', '54']
等价于
v = re.findall("\d+", "wded123fw54")
print(v) # ['123', '54']
如果需要多次使用这个正则表达式的话,使用 re.compile() 和保存这个正则对象以便复用,可以让程序更加高效。
2、findall
返回所有满足匹配条件的结果,放在列表里。
import re
v1 = re.findall("\d+", "wded123fw54")
print(v1) # ['123', '54']
3、search
只返回第一个查到结果,构成的对象。可通过group方法
得到匹配的字符串。没查到结果,返回None
v2 = re.search("\d+", "wded123fw54").group()
print(v2) # 123
v3 = re.search("\d{5}}", "wded123fw54")
print(v3) # None
4、match
类似search,但只从字符串开头匹配。
v = re.match("\d+", "wded123fw54")
print(v) # None
5、split
分割
v1 = re.split('\d+',"wded123fw54")
print(v1) # ['wded', 'fw', '']
v2 = re.split('\d+',"wded123fw54a",1)
print(v2) # ['wded', 'fw54a']
6、sub
替换
v1 = re.sub('\d+',"A","wded123fw54")
print(v1) # wdedAfwA
v2 = re.sub('\d+',"A","wded123fw54",1)
print(v2) # wdedAfw54
7、finditer
类似findall方法,但是返回的是一个迭代器
v1 = re.finditer("\d+", "wded123fw54")
print(v1) # <callable_iterator object at 0x000002676E7004C0>
print(v1.__next__().group()) # 123
print(v1.__next__().group()) # 54
更多re用法可查询官网:https://docs.python.org/zh-cn/3/library/re.html#re.purge