本模块提供了类似于Perl的正则表达式匹配操作。 要匹配的模式和字符串可以是Unicode字符串以及8位字符串。
正则表达式使用反斜杠字符( '\' )来表示特殊的形式或者来允许使用特殊的字符而不要启用它们特殊的含义。 这与字符串字面值中相同目的的相同字符的用法冲突; 例如,要匹配一个反斜线字面值,你必须写成 '\\\\' 作为模式字符串,因为正则表达式必须是 \\ ,每个反斜线在python字符串字面值内部必须表达成 \\ 。
解决的办法是使用Python的原始字符串符号表示正则表达式的模式; 在以 'r' 为前缀的字符串字面值中,反斜杠不会以任何特殊的方式处理。 所以 r"\n" 是一个包含 '\' 和 'n' 两个字符的字符串,而 "\n" 是包含一个换行符的单字符字符串。 通常在Python代码中,模式的表示使用这种原始字符串符号。
重要的注意事项是大部分正则表达式操作可以利用模块级别的函数和 RegexObject 的方法。 这些函数是快捷的方式,它们不要求你首先编译一个正则表达式对象,但会遗漏一些调优的参数。
请参见
Mastering Regular Expressions 《精通正则表达式》 O’Reilly 该书第 2 版不再涵盖Python内容,但其第 1 版中涵盖了很多写得不错、非常详细的正则表达式模式。 7.2.1. 正则表达式语法正则表达式(或RE)指定一组匹配它字符串; 此模块中的函数让你检查一个特定的字符串是否匹配给定的正则表达式(或给定的正则表达式是否匹配特定的字符串,这可归结为同一件事)。
正则表达式可以连接以形成新的正则表达式; 如果 A 和 B 两个都是正则表达式,那么 AB 也是正则表达式。 一般来说,如果字符串 p 匹配 A 且另一个字符串 q 匹配 B ,那么字符串 pq 将匹配AB。 除非 A 或 B 包含低优先级的操作; A 和 B 之间存在边界条件; 或有编号的组的引用。 因此,复杂的表达式可以轻松地从这里所描述的更简单的原始表达式构建。 关于理论的细节及正则表达式的实现,请参阅上文引用的Friedl的书或任何一本有关编译器构造的教科书。
下面简要说明了正则表达式的格式。 进一步的信息和更友好的演示,请参阅 正则表达式HOWTO 。
正则表达式可以包含特殊和普通字符。 最普通的字符,如 'A' 、 'a' 、或 '0' 是最简单的正则表达式; 它们简单地匹配它们自己。 你可以连接普通字符,所以 last 匹配字符串 'last' 。 (在本节剩下的部分,我们将把正则表达式写成不带引号的形式 这种 独特 风格 ,要匹配的字符串写成带引号的形式 '用 单 引号' 。)
某些字符,比如 '|' 或 '(' ,比较特殊。 特殊字符要么表示某个类别的普通字符,要么影响它们周围的正则表达式如何解释。 正则表达式的模式字符串不可以包含空字节,但可以使用 \number 符号指定空字节,例如 '\x00' 。
特殊字符有:
'.' (点号。) 在默认模式下,匹配除换行以外的任意字符. 如果 DOTALL 标志被指定, 则匹配包括换行符在内的所有字符. '^' (脱字符号。) 在默认模式下匹配字符串的起始位置, 在 MULTILINE 模式下也匹配换行符之后的位置. '$' 匹配字符串的末尾或者字符串末尾换行符之前的位置,在 MULTILINE 模式下还匹配换行符之前的位置。 foo 既匹配‘foo’也匹配‘foobar’,但是 foo$ 只匹配‘foo’。 更有趣的是,正常情况下 foo.$ 只匹配 'foo1\nfoo2\n' ‘foo2’,但是在 MULTILINE 模式下还能匹配‘foo1’; 在 'foo\n' 中搜索单个 $ 将找到两个(空的)匹配: 一个是换行符之前,一个是字符串的末尾。 '*' 匹配前面重复出现的正则表达式零次或多次,尽可能多的匹配。 ab* 将匹配‘a’、‘ab’或‘a’ 后面跟随任意数目的‘b’。 '+' 引起生成的RE匹配1个或多个前导的RE,尽可能多的匹配。 ab+ 将匹配‘a’之后跟随任意多个数目不为零的‘b’,它将不能匹配单纯的一个‘a’。 '?'