本篇文档是在Python中通过re模块使用正则表达式的引导手册,提供了一个比参考类库相应部分更详细的介绍。
正则表达式的使用
1.简介
正则表达式(也称为REs,regexes,或者regex patterns)本质上是一个被嵌入到Python中的一个精细的、高度专业化的程序语言,并通过re模块提供给程序员使用。使用正则表达式,你需要为那些你想要匹配的字符串集合定制一些规则;这些集合可能包含英文句子、邮箱地址、TeX命令或者任何你想要的东西。然后你就会问类似于这样的问题:“这个字符串匹配这个模式吗?”或者“在这个字符串中有适合的模式来匹配吗?”你可以使用正则表达式去修改一个字符串或者用各种各样的方式去分割字符串。
正则表达式模式被编译成一系列的字节码,然后由一个用C语言写的匹配引擎执行。对于高级的应用,你必须要注意对于一个给定的RE,引擎是如何执行的,并通过一定的方式来编写RE以便这些字节码运行地更快。但本篇文档不包含RE优化的内容,因为这些需要你对引擎内核有一个很好的理解。
正则表达式语言相对较小,也比较严格,所以并不是所有的字符串处理任务都可以用正则表达式完成。有些任务可以用正则表达式做,但是表达式非常复杂。在这些情况下,你最好通过常规Python代码完成任务,虽然Python代码可能会比精心编写的正则表达式运行速度要慢,但是相对来说,它更好理解。
2.简单的模式
我们从学习最简单的正则表达式开始。由于正则表达式常被用于处理字符串,所以我们由最常见的任务入手:字符匹配。
对于计算机科学中潜在的正则表达式的更多细节,你可以参考编写编译器的有关资料。
2.1.字符匹配
大多数字符和字母会简单地匹配它们自己,比如,正则表达式test可以完全匹配字符串test(你可以使用不区分大小写模式,那么这个正则表达式也可以匹配Test或者TEST;稍后会介绍更多这方面的细节)。
当然这个规则也有例外,有一些字符是特殊的【元字符】,它们并不匹配它们自身。相反的,它们表示将要匹配一些不同的东西,或者通过重复、改变意义等影响RE中的其他部分。本篇文档大部分内容都致力于讨论各种元字符和它们的用法。
这是元字符的完整列表,它们的意义将在随后讨论:
. ^ $ * +