四大金刚 match search findall finditer
import re
str = 'abc123'
# match 只从开头匹配,只匹配一次
pattern = re.compile('\d+')
result = pattern.match(str)
print(result)
NONE
# search 全局匹配,只匹配一次
pattern = re.compile('\d+')
result = pattern.search(str)
print(result)
<_sre.SRE_Match object; span=(3, 6), match='123'>
# 数据简单 findall
# 数据量大 使用 finditer
# 为什么提供 findall 和 finditer 方法
# 为什么迭代器,延迟计算
# 内存消耗变小
# findall 返回列表
pattern = re.compile('\d+')
results = pattern.findall(str)
for result in results:
print(result)
123
# finditer 返回迭代器
pattern = re.compile('\d+')
results = pattern.finditer(str)
# match 的迭代器
for result in results:
print(result)
<_sre.SRE_Match object; span=(3, 6), match='123'>
两大护法 split sub
import re
# 分组 split
str = 'a;dj,dj ;sjef'
pattern = re.compile(r'[;, ]+')
result = pattern.split(str)
print(result)
# 替换 sub
str = "hello world,sdfj,sdjkl,zhuwei cao"
# 提取中带空格的内容并且替换成 #
pattern = re.compile(r'(\w+) (\w+)')
# result = pattern.sub("#",str)
# 把带空格的2个单词交换
result = pattern.sub(r"\2 \1",str)
print(result)