更多的元字符
还有一些我们还没展示的元字符,其中的大部分将在本节展示。
剩下来要讨论的一部分元字符是零宽界定符(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。
![比较详细Python正则表达式操作指南(re使用)[5]](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![比较详细Python正则表达式操作指南(re使用)[5]](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![比较详细Python正则表达式操作指南(re使用)[5]](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![比较详细Python正则表达式操作指南(re使用)[5]](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![比较详细Python正则表达式操作指南(re使用)[5]](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![比较详细Python正则表达式操作指南(re使用)[5]](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![比较详细Python正则表达式操作指南(re使用)[5]](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![比较详细Python正则表达式操作指南(re使用)[5]](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![比较详细Python正则表达式操作指南(re使用)[5]](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
$
匹配行尾,行尾被定义为要么是字符串尾,要么是一个换行字符後面的任何位置。
![比较详细Python正则表达式操作指南(re使用)[5]](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![比较详细Python正则表达式操作指南(re使用)[5]](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![比较详细Python正则表达式操作指南(re使用)[5]](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![比较详细Python正则表达式操作指南(re使用)[5]](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![比较详细Python正则表达式操作指南(re使用)[5]](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![比较详细Python正则表达式操作指南(re使用)[5]](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![比较详细Python正则表达式操作指南(re使用)[5]](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![比较详细Python正则表达式操作指南(re使用)[5]](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![比较详细Python正则表达式操作指南(re使用)[5]](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![比较详细Python正则表达式操作指南(re使用)[5]](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![比较详细Python正则表达式操作指南(re使用)[5]](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![比较详细Python正则表达式操作指南(re使用)[5]](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![比较详细Python正则表达式操作指南(re使用)[5]](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
匹配一个 "$",使用 "$ 或将其包含在字符类中,如[$]。
"A
只匹配字符串首。当不在 MULTILINE 模式,"A 和 ^ 实际上是一样的。然而,在 MULTILINE 模式里它们是不同的;"A 只是匹配字符串首,而 ^ 还可以匹配在换行符之後字符串的任何位置。
"Z
Matches only at the end of the string.
只匹配字符串尾。
"b
单词边界。这是个零宽界定符(zero-width assertions)只用以匹配单词的词首和词尾。单词被定义为一个字母数字序列,因此词尾就是用空白符或非字母数字符来标示的。
下面的例子只匹配 "class" 整个单词;而当它被包含在其他单词中时不匹配。
![比较详细Python正则表达式操作指南(re使用)[5]](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![比较详细Python正则表达式操作指南(re使用)[5]](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![比较详细Python正则表达式操作指南(re使用)[5]](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![比较详细Python正则表达式操作指南(re使用)[5]](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![比较详细Python正则表达式操作指南(re使用)[5]](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![比较详细Python正则表达式操作指南(re使用)[5]](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![比较详细Python正则表达式操作指南(re使用)[5]](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![比较详细Python正则表达式操作指南(re使用)[5]](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![比较详细Python正则表达式操作指南(re使用)[5]](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![比较详细Python正则表达式操作指南(re使用)[5]](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![比较详细Python正则表达式操作指南(re使用)[5]](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![比较详细Python正则表达式操作指南(re使用)[5]](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![比较详细Python正则表达式操作指南(re使用)[5]](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![比较详细Python正则表达式操作指南(re使用)[5]](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![比较详细Python正则表达式操作指南(re使用)[5]](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
当用这个特殊序列时你应该记住这里有两个微妙之处。第一个是 Python 字符串和正则表达式之间最糟的冲突。在 Python 字符串里,""b" 是反斜杠字符,ASCII值是8。如果你没有使用 raw 字符串时,那幺 Python 将会把 ""b" 转换成一个回退符,你的 RE 将无法象你希望的那样匹配它了。下面的例子看起来和我们前面的 RE 一样,但在 RE 字符串前少了一个 "r" 。
![比较详细Python正则表达式操作指南(re使用)[5]](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![比较详细Python正则表达式操作指南(re使用)[5]](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![比较详细Python正则表达式操作指南(re使用)[5]](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![比较详细Python正则表达式操作指南(re使用)[5]](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![比较详细Python正则表达式操作指南(re使用)[5]](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![比较详细Python正则表达式操作指南(re使用)[5]](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![比较详细Python正则表达式操作指南(re使用)[5]](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![比较详细Python正则表达式操作指南(re使用)[5]](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![比较详细Python正则表达式操作指南(re使用)[5]](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![比较详细Python正则表达式操作指南(re使用)[5]](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
![比较详细Python正则表达式操作指南(re使用)[5]](https://i-blog.csdnimg.cn/blog_migrate/f0cd6c7f9e7ae96feae062cb48f670f0.gif)
第二个在字符类中,这个限定符(assertion)不起作用,"b 表示回退符,以便与 Python 字符串兼容。
"B
另一个零宽界定符(zero-width assertions),它正好同 "b 相反,只在当前位置不在单词边界时匹配。