20210627-python 正则表达式

2021-06-27  本文已影响0人  jiaschien

本文抄录于《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'

对于这个示例,需要注意以下几点。

? 问号表示可选的子模式可出现一次,也可以不出现。还有其他几个运算符用于表示 子模式 可重复多次。

例如,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' 匹配。

参考文献

上一篇 下一篇

猜你喜欢

热点阅读