Cheat Sheet速查表
跳转到主要内容

正则表达式速查表

适用范围。 正则语法取决于引擎与标志。Python 字符串模式中的 \d 和 \w 默认包含 Unicode 字符,除非启用 ASCII 模式。Python、JavaScript、Java 与 PCRE 的命名组和后行断言用法有所不同。

匹配字符

模式含义
[abc]匹配a,b,c中的任意一个字符
[^abc]不匹配a,b,c中的所有字符,“^”只有作为第一个字符出现才有效
[a-g]匹配a-g范围内的任意一个字符
[^a-g]不匹配a-g中的所有字符
[H-N]匹配H-N范围内的任意一个字符
[0-9]匹配0-9范围内的任意一个字符
[a-gH-N]匹配a-g,H-N范围内的任意一个字符
通配符:
.[^\n\r],匹配非换行符
\sspace,空白字符,即换行,制表,空格等字符
\S[^\s]
\d数字字符;Unicode 或 ASCII 范围由引擎与标志决定
\D[^\d]
\w单词字符;具体范围由引擎与标志决定
\W[^\w]

匹配组

模式含义
(a|b)匹配a或b并捕获
(...)捕获组
(?:...)非捕获组
(?P<name>...) / (?<name>...)命名捕获:Python / 现代 JavaScript 与 Java
(?(condition)true_regex|false_regex)条件组(Python / PCRE,不适用于 JavaScript)

group(0)用于获取整个匹配串的匹配结果,group(n)(n > 0)则可以从整个匹配串的结果中获取子捕获组。

频次范围

模式含义
{3}前面匹配项出现3次,等价于{3,3}
{3,6}前面的匹配项出现3到6次
{3,}前面的匹配项至少出现3次
{0,6}前面的匹配项最多出现6次
通配符:
*{0,}
+{1,}
?{0,1}
\w*贪婪模式
\w*?非贪婪模式

定点符

模式含义
^字符串开始符
$字符串结尾符
\bboundary,单词边界
\B非单词边界
定点断言
(?=exp)向后肯定断言(exp后缀)
(?<=exp)向前肯定断言(exp前缀)
(?!exp)向后否定断言(没有exp后缀)
(?<!exp)向前否定断言(没有exp前缀)

官方参考

命名组示例:Python 使用 (?P<name>...),现代 JavaScript 和 Java 使用 (?<name>...)。条件组并非所有引擎都支持,JavaScript 不支持该语法。group(0) 是 Python 等引擎的 API,不是正则表达式语法。

Python 命名捕获示例

import re

match = re.fullmatch(r"(?P<word>\w+)", "café")
print(match.group("word"))  # café
print(re.fullmatch(r"\w+", "café", flags=re.ASCII))  # None