正则表达式
正则表达式由几个核心片段组合而成,理解这些基本构件是阅读和编写模式的基础:
下面的例子中,[A-Z] 匹配一个大写 ASCII 字母,\d{3} 匹配三个数字,\b 表示单词边界,因此 codes 得到 ["A-104", "B-208"]。(?i) 让替换忽略大小写,updated 得到 "item A-104, item B-208"。整个字符串 "A-104" 都符合模式,所以 is_code 为 True。字符串前的 r 用来避免 Python 字符串的转义规则干扰正则中的反斜杠:
import re
text = "Order A-104, order B-208"
codes = re.findall(r"\b[A-Z]-\d{3}\b", text)
updated = re.sub(r"(?i)\border\b", "item", text)
is_code = re.fullmatch(r"[A-Z]-\d{3}", "A-104") is not None
根据需求明确选择操作函数:
search():在字符串任意位置查找第一个匹配项。fullmatch():要求整个字符串完全匹配模式。findall():查找并返回所有匹配项。sub():执行查找并替换。
在将正则应用于不可信数据之前,务必进行充分测试。测试用例应覆盖:典型匹配、不匹配场景、空输入、Unicode 字符以及异常长的输入字符串。
注意,正则语法在不同环境中存在差异。Python、JavaScript、各类编辑器及命令行工具的实现并不完全一致。Python re 官方文档 仅对 Python 环境具有权威性;RegExr 适合用作交互式调试工具,但不能作为所有正则引擎的通用规范。