Re模块

正则我会写了,怎么在python程序中使用呢?答案便是 re 模块。

findall

findall 查找所有,返回list

1
2
3
4
lst = re.findall("m","mai le fo len,mai ni mei!")
print(lst) #['m','m','m']
lst = re.findall(r"\d+","5点之前,你要给我5000万")
print(lst) #['5','5000']

search 会进行匹配,但是如果匹配到了第一个结果就会返回这个结果。如果匹配不上search返回值为None

1
2
ret = re.search(r'\d',"5点之前,你要给我5000万")
print(lst) # 5

match

match 只能从字符串的开头进行匹配

1
2
ret = re.match('a','abc').group()
print(ret) # a

finditer

finditer 和 findall 差不多,只不过返回的是迭代器(重点)

1
2
3
it = re.finditer("m","mai le fo len,mai ni mei!")
for el in it:
print(el.group()) # 依然需要分组

compile

compile() 可以将⼀个⻓⻓的正则进⾏预加载. ⽅便后⾯的使⽤

1
2
3
4
5
obj = re.compile(r'\d{3}') # 将正则表达式编译成为
⼀个 正则表达式对象, 规则要匹配的是3个数字
ret = obj.search('abc123eeee') # 正则表达式对象调
⽤search, 参数为待匹配的字符串
print(ret.group()) # 结果: 123

正则中的内容如何单独提取?

单独获取到正则中的具体内容可以给分组起名字

1
2
3
4
5
6
7
8
s = """
<div class='⻄游记'><span id='10010'>中国联通</span></div>
"""
obj = re.compile(r"<span id='(?P<id>\d+)'>(?P<name>\w+)</span>", re.S)
result = obj.search(s)
print(result.group()) # 结果: <span id='10010'>中国联通</span>
print(result.group("id")) # 结果: 10010 # 获取id组的内容
print(result.group("name")) # 结果: 中国联通 # 获取name组的内容

这⾥可以看到我们可以通过使⽤分组. 来对正则匹配到的内容进 ⼀步的进⾏筛选


Re模块
https://equinox-shame.github.io/2022/03/14/Re模块/
作者
梓曰
发布于
2022年3月14日
许可协议