二选一和子模式
需要以不同的方式处理每个字符时,字符集很好,但如果只想匹配字符串'python'和'perl', 该如何办呢?使用字符集或通配符无法指定这样的模式,而必须使用表示二选一的特殊字符:管 道字符(|)。所需的模式为'python|perl'。 然而,有时候你不想将二选一运算符用于整个模式,而只想将其用于模式的一部分。为此, 可将这部分(子模式)放在圆括号内。对于前面的示例,可重写为'p(ython|erl)'。请注意,单 个字符也可称为子模式。
可选模式和重复模式
通过在子模式后面加上问号,可将其指定为可选的,即可包含可不包含。例如,下面这个不 太好懂的模式:
r'(http://)?(www\.)?python\.org'
只与下面这些字符串匹配:
'http://www.python.org'
'http://python.org'
'www.python.org'
'python.org'
对于这个示例,需要注意如下几点。
我对句点进行了转义,以防它充当通配符。
为减少所需的反斜杠数量,我使用了原始字符串。
每个可选的子模式都放在圆括号内。
每个可选的子模式都可以出现,也可以不出现。
问号表示可选的子模式可出现一次,也可不出现。还有其他几个运算符用于表示子模式可重 复多次。 (pattern)*:pattern可重复0、1或多次。
(pattern)+:pattern可重复1或多次。
(pattern){m,n}:模式可从父m~n次。
例如,r'w*\.python\.org'与'www.python.org'匹配,也与'.python.org'、'ww.python.org' 和'wwwwwww.python.org'匹配。同样,r'w+\.python\.org'与'w.python.org'匹配,但与'.python. org'不匹配,而r'w{3,4}\.python\.org'只与'www.python.org'和'wwww.python.org'匹配。
注意 在这里,术语匹配指的是与整个字符串匹配,而函数match(参见表10-9)只要求模式与 字符串开头匹配。








暂无数据