Python3 正则表达式¶
本页定位为正则表达式的模式设计与使用场景入门;需要查阅
Pattern、Match、标志位等对象 API 时,请继续阅读 Python re 模块。
概念与用途¶
正则表达式描述文本模式,适合格式校验、提取和替换。Python 的 re 模块支持 Unicode、捕获组、命名组和预编译模式;复杂语法解析通常应使用专门解析器。
核心 API¶
re.fullmatch() 校验整个字符串,search() 查找首个匹配,finditer() 流式遍历,sub() 替换。模式建议使用原始字符串并通过 re.compile() 复用。
| 模式元素 | 含义 | 示例 |
|---|---|---|
\d / \w |
数字/单词字符 | r"\d+" |
* / + / ? |
数量限定 | r"https?" |
(...) |
捕获分组 | r"(cat|dog)" |
(?P<name>...) |
命名分组 | 结构化提取 |
import re
pattern = re.compile(r"(?P<name>[A-Za-z]+)=(?P<value>\d+)")
text = "width=128 height=72"
result = {m["name"]: int(m["value"]) for m in pattern.finditer(text)}
print(result)
示例:校验与修复替换¶
fullmatch() 适合字段校验;替换回调适合根据匹配内容计算结果,避免替换字符串中的反斜杠和组引用歧义。
import re
username = "alice_2026"
valid = re.fullmatch(r"[a-z][a-z0-9_]{2,19}", username) is not None
print("合法用户名:", valid)
text = "item2 item10"
print(re.sub(r"\d+", lambda match: str(int(match.group()) + 1), text))
正则适合局部、规则稳定的文本模式。嵌套语言、完整 HTML、编程语言语法和需要语义状态的输入应使用解析器。先写代表性成功、失败和边界样本,再决定模式,而不是不断给单个失败样本打补丁。
常见错误与安全注意¶
match()只从开头匹配,完整校验应使用fullmatch()。- 嵌套量词可能造成灾难性回溯和 ReDoS,应限制输入长度并简化模式。
- 替换字符串包含用户输入时,可传入替换函数避免反向引用歧义。