跳到主要内容

正则表达式

正则表达式由几个核心片段组合而成,理解这些基本构件是阅读和编写模式的基础:

形式含义
.匹配除换行符外的任意字符(默认行为)
^ / $默认匹配字符串开头 / 结尾($ 也可匹配末尾换行符之前);多行模式下也匹配各行边界
[abc] / [^abc]字符集:匹配 / 排除指定字符
*, +, ?, {m,n}量词:控制重复次数
(…) / (?:…)捕获组 / 非捕获组
\bPython re 中的单词边界

下面的例子中,[A-Z] 匹配一个大写 ASCII 字母,\d{3} 匹配三个数字,\b 表示单词边界,因此 codes 得到 ["A-104", "B-208"](?i) 让替换忽略大小写,updated 得到 "item A-104, item B-208"。整个字符串 "A-104" 都符合模式,所以 is_codeTrue。字符串前的 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 适合用作交互式调试工具,但不能作为所有正则引擎的通用规范。

探索关联打开关联网络