在 Python 程序中,模式字符串使用如下特殊的语法来表示一个正则表达式:
- 字母和数字表示它们自身,一个正则表达式模式中的字母和数字匹配同样的字符串;
- 当大多数字母和数字前加一个反斜杠时,它们会拥有不同的含义;
- 标点符号只有被转义时才匹配自身,否则它们表示特殊的含义;
- 反斜杠本身需要使用反斜杠转义;
- 因为正则表达式通常都包含反斜杠,所以最好使用原始字符串来表示它们。模式元素(如r'\t',等价于'\\t')匹配相应的特殊字符。
表 1 列出了正则表达式模式语法中的特殊元素。如果使用模式的同时提供了可选的标志参数,则某些模式元素的含义会发生改变。
模式 | 描述 |
---|---|
^ | 匹配字符串的开头 |
$ | 匹配字符串的末尾 |
. | 匹配任意字符,除换行符之外,当指定 re.DOTALL 标记时,则可以匹配包括换行符的任意字符 |
[...] | 用来表示一组字符,单独列出,如 [amk] 匹配 'a' 'm' 或 'k' |
[^...] | 不在 [] 中的字符,如[^abc] 匹配除 a、b、c 之外的字符 |
re* | 匹配 0 个或多个表达式 |
re+ | 匹配 1 个或多个表达式 |
re? | 匹配 0 个或 1 个由前面的正则表达式定义的片段,非贪婪方式 |
re{ n} | 精确匹配前面的 n 个表达式 |
re{ n, m} | 匹配 n~m 次由前面的正则表达式定义的片段,贪婪方式 |
a | b | 匹配 a 或 b |
(re) | 匹配括号内的表达式,也表示一个组 |
(?imx) | 正则表达式包含 3 种可选标志—— I、m 或 x。只影响括号中的区域 |
(?-imx) | 正则表达式关闭 I、m 或 x 可选标志。只影响括号中的区域 |
(?: re) | 类似于(…),但是不表示一组 |
(?imx: re) | 在括号中使用I、m 或 x 可选标志 |
(?-imx: re) |
在括号中不使用 I、m 或 x 可选标志 |
(?#...) | 注释 |
(?= re) | 前向肯定界定符。如果所含正则表达式以…表示,则在当前位置匹配时成功;否则,失败。一旦所含表达式已经使用,那么模式的剩余部分还要尝试匹配界定符的右边 |