本文抄录于《Python基础教程》(第3版),作者:Magnus Lie Hetland 译者:袁国忠
有删节。
- 通配符
句点 .
与除换行符外的其他字符都匹配,因此正则表达式 .python
与字符串 'python'
和'jython'
都匹配。
- 转义
要让特殊字符的行为与普通字符一样,可对其进行转义:如对字符串中的 引号
进行转义那样,在它前面加上一个反斜杆。因此,在这个示例中,可使用模式 python\\.org
,它只与 'python.org'
匹配。
在有些情况下也可使用单个反斜杆,让解释器单独对其进行转义,让解释器自动对其转义,但不要这样依赖解释器。如果厌烦了两个反斜杆,可使用原始字符串,如 r'python.org'
。
- 字符集
匹配任何字符很有用,但有时你需要更细致地控制。为此,可以用方括号将一个子串括起,创建一个所谓的字符集。这样的字符集与其包含的字符都匹配,例如 '[pj]ython'
与 'python'
和 'jython'
都匹配,但不与其他字符串匹配。
你还可以使用范围,例如 '[a-z]'
与 a~z 的任何字符都匹配。你还可组合多个访问,方法是依次列出他们。例如 '[a-zA-Z0-9]'
与大写字母、小写字母和数字都匹配。
注意:字符集只能匹配一个字符。
要指定排除字符集,可在开头添加一个^字符,例如 '[^abc]'
与除a、b和c外的其他任何字符都匹配。
- 二选一和子模式
需要以不同的方式处理每个字符时,字符集很好,但如果只想匹配字符串 'python'
和 'perl'
,该如何办呢?
使用字符集或通配符无法指定这样的模式,而必须使用表示二选一的特殊字符:管道字符 (|)
。所需的模式为 'python|perl'
。
- 可选模式的重复模式
通过在子模式后面加上问号,可将其指定为可选的,即可包含可不包含。例如,下面这个不太好懂的模式:
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'
匹配。
网友评论