更多模式功能
到目前为止,我们只展示了正则表达式的一部分功能。在本节,我们将展示一些新的元字符和如何使用组来检索被匹配的文本部分。
1. 更多的元字符
还有一些我们还没展示的元字符,其中的大部分将在本节展示。
剩下来要讨论的一部分元字符是零宽界定符(zero-width
assertions)。它们并不会使引擎在处理字符串时更快;相反,它们根本就没有对应任何字符,只是简单的成功或失败。举个例子, \b
是一个在单词边界定位当前位置的界定符(assertions),这个位置根本就不会被 \b 改变。这意味着零宽界定符(zero-width
assertions)将永远不会被重复,因为如果它们在给定位置匹配一次,那么它们很明显可以被匹配无数次。
|
可选项,或者 "or" 操作符。如果 A 和 B 是正则表达式,A|B 将匹配任何匹配了
"A" 或 "B" 的字符串。| 的优先级非常低,是为了当你有多字符串要选择时能适当地运行。Crow|Servo 将匹配"Crow" 或 "Servo",
而不是 "Cro", 一个 "w" 或 一个 "S", 和 "ervo"。 为了匹配字母 "|",可以用 \|,或将其包含在字符类中,如[|]。
^
匹配行首。除非设置 MULTILINE 标志,它只是匹配字符串的开始。在 MULTILINE
模式里,它也可以直接匹配字符串中的每个换行。 例如,如果你只希望匹配在行首单词
"From",那么 RE 将用 ^From。
切换行号显示 1 pat = re.compile(r"\s*(?P<header>[^:]+)\s*:(?P<value>.*?)\s*$")
反馈
正则表达式是一个复杂的主题。本文能否有助于你理解呢?那些部分是否不清晰,或在这儿没有找到你所遇到的问题?如果是那样的话,请将建议发给作者以便改进。
描述正则表达式最全面的书非Jeffrey Friedl 写的《精通正则表达式》莫属,该书由O'Reilly
出版。可惜该书只专注于 Perl 和 Java 风格的正则表达式,不含任何 Python 材料,所以不足以用作Python编程时的参考。(第一版包含有
Python 现已过时的 regex 模块,自然用处不大)。 |