re

2022-12-11

Python 的 re 模块使用的语法是以 Perl 使用的正则表达式语法为基础,加上一些 Python 特定的改进,一些通用性的语法可以参考 regex

Match

Match 对象包含有关匹配性质的信息:原输入字符串、使用的正则表达式以及在原字符串中出现的位置,如果未找到则返回 None。

  • .start(): 返回首个匹配到字符串的开始
  • .end(): 返回首个匹配到字符串的结尾
  • .groups():

函数

re.compile

将正则表达式的的样式编译为一个正则对象。

1
p = "ab"
2
text = "abbaaabbbbaaaaa"
3
4
pron = re.compile(p)
5
prog.match(text)
6
7
# 等同于
8
re.match(p, text)
9
10
# 返回: <re.Match object; span=(0, 2), match='ab'>

如果需要多次复用,用这个方式更加高效。

re.search()

成功匹配返回一个 #Match 对象,如果没找到则返回 None

re.findall()

成功匹配返回对应字符串列表,匹配失败返回空列表。

1
import re
2
3
text = "abbaaabbbbaaaaa"
4
pattern = "ab"
5
6
re.findall(pattern, text)
7
# 返回: ['ab', 'ab']

re.finditer()

#re.findall() 类似,不过是返回 #Match 对象。

re.sub()

替换所有匹配为指定内容

1
import re
2
3
p = re.compile("ab")
4
text = "abbaaabbbbaaaaa"
5
p.sub("42", text)
6
# 返回: 42baa42bbbaaaaa

re.subn()

功能和 #re.sub() 一样,不过是以元组形式返回,除修改后的字符串之外,还包含替换的次数。

搜索选项

1
import re
2
3
re.IGNORECASE # 忽略大小写
4
# 缩写:re.I, 内联标记: ?i
5
re.MULTILINE # 多行匹配
6
# 缩写: re.M, 内联标记: ?m
7
re.DOTALL # 让 . 匹配任何字符
8
# 缩写: re.S, 内联标记: ?s