20210627-python 正则表达式

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

参考文献

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • re模块包含对正则表达式的支持 先讲一些正则中的匹配规则 通配符 . .可以匹配任何字符(除了换行符\n,在 DO...
    SateZheng阅读 321评论 0 0
  • 1. 什是正则表达式? 答:正则表达式又称规则表达式,英语是Regular Expression,在代码中常简写为...
    backup备份阅读 1,337评论 0 1
  • “正则表达式”是可以匹配文本片段的模式。用来匹配、提取、或替换文本或字符串中的片段、子串。 1. 字符 => 匹配...
    NJingZYuan阅读 371评论 0 1
  • 正则表达式中的特殊字符 字符 含意 \ 做为转意,即通常在""后面的字符不按原来意义解释,如/b/匹配字符"b",...
    Allan要做活神仙阅读 559评论 0 0
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 8,588评论 28 53