15.1 引言/动机
正则表达式(RE)为高级文本模式匹配,以及搜索-替代等功能提供了基础。正则表达式(RE)是一些由字符和特殊符号组成的字符串,它们描述了这些字符和字符的某种重复方式,因此能按某种模式匹配一个有相似特征的字符串的集合,因此能按某模式匹配一系列有相似特征的字符串。
Python通过标准库的re模块支持正则表达式。
15.2 正则表达式使用的特殊符号和字符
15.2.1 用管道符号(|)匹配多个正则表达式模式
管道符号(|)表示一个或操作。
15.2.2 匹配任意一个单个的字符(.)
点字符或句点(.)符号匹配除换行符外的任意一个单个字符。
15.2.3 从字符串的开头或结尾或单词边界开始匹配(^ / $ / \b / \B)
还有些符号和特殊字符是用来从字符串的开头或结尾开始搜索正则表达式模式的。如果想从字符串的开头开始匹配一个模式,你必须用脱字符号‘^’或特殊字符\A。类似,美元符号($)或\Z是用来(零宽度)匹配字符串的结尾的。
正因为这几个字符和搜索的位置有关,所以需要和搜索模式一起使用。
特别说明,如果你想匹配^或者$,就必须用反斜杠进行转义。
\b匹配的模式是一个单词边界,与之相应的模式一定在一个单词的开头,不论这个单词的前面是有字符,还是没有字符。同样地,\B只匹配出现在一个单词中间的模式。
15.2.4 创建字符串([])
尽管句点可用来匹配任意字符,但有时候你需要匹配某个特殊的字符。正因为如此,方括号([])被发明出来。使用方括号的正则表达式会匹配方括号里的任何一个字符。
15.2.5 指定范围(-)和否定(^)
方括号除匹配单个字符外,还可以支持所指定的字符范围。方括号里一对符号中间的连字符(-)用来表示一个字符的范围。
如果在左方括号后第一个字符是上箭头符号(^),就表示不匹配指定字符集里的任意字符。
15.2.6 使用闭包操作符(*,+,?,{})实现多次出现/重复匹配
星号或称星号操作符匹配它左边那个正则表达式出现零次或零次以上的情况。
加号(+)操作符匹配它左边那个正则表达式模式至少出现一次的情况。
问号操作符(?)匹配它左边那个正则表达式模式出现零次或一次的情况。
还有花括号操作符({}),花括号里可以是单个的值,也可以是由逗号分开的一对值。如果是一个值,如{N},则表示匹配N次出现;如果是一对值,即{M,N},则表示匹配M次到N次出现。
问号(?)有两种含义:1.单独使用时表示匹配出现零次或一次的情况。2.紧跟在表示重复的元字符后面时,表示要求搜索引擎匹配的字符串越短越好。
15.2.7 特殊字符表示、字符集
\d表示十进制数字
\w表示整个字符数字的字符集
\s表示空白字符
这些特殊字符的大写形式表示不匹配
15.2.8 用圆括号(())组建组
一对圆括号(())和正则表达式一起使用时可以实现以下任意一个(或两个)功能:
对正则表达式进行分组
匹配子组