PYTHON 正则表达式的中括号[]和竖线 | 的详细讲解

[] 和 | 的详解讲解


    在之前写过几篇关于正则表达式的基本使用概念,但是,对其中较为不常用或者经常使用其基本功能,缺乏了对其进一步的理解。在做字符串匹配时,遇到一个问题:如何执行正则表达式的或?
    经过再一次的理解概念和实战,有了一定的理解。
    我们还是来看看如何操作吧。

import re
string1 = "adsferf Novel234324fff dfasfdfda"
string2 = "adfadfa EN23423.2dfafd asdfa"
rgx = re.compile(r'(.+?)(Novel\d+f|EN\d+\.2d)(.+)')
re.search(rgx, string2).group(2)
Out: 'EN23423.2d'
re.search(rgx, string1).group(2)
Out: 'Novel234324f'

    在上述示例中,我们看到了使用 (…|…) 的正则表达式,它能够匹配两种情况的字符串。这两种匹配都属于 捕获子组 2 ,但是如果使用 (…)|(…) ,则属于不同的捕获子组。
    其实,另一种 [] 则是表示字符集合,是单个字符的 的表示方法。下面看看描述。

  1. []
  • 用于表示一个字符集合。
  • 在一个集合中:字符可以单独列出,比如 [amk] 匹配 ‘a’, ‘m’, 或者 ‘k’。
  • 可以表示字符范围,通过用 ‘-’ 将两个字符连起来。比如 [a-z] 将匹配任何小写ASCII字符, [0-5][0-9] 将匹配从 00 到 59 的两位数字, [0-9A-Fa-f] 将匹配任何十六进制数位。 如果 - 进行了转义 (比如 [a-z])或者它的位置在首位或者末尾(如 [-a] 或 [a-]),它就只表示普通字符 ‘-’。
  • 特殊字符在集合中,失去它的特殊含义。比如 [(+*)] 只会匹配这几个文法字符 ‘(’, ‘+’, ‘*’, or ‘)’。
  • 字符类如 \w 或者 \S (如下定义) 在集合内可以接受,它们可以匹配的字符由 ASCII 或者 LOCALE 模式决定。
  • 不在集合范围内的字符可以通过 取反 来进行匹配。如果集合首字符是 ‘^’ ,所有 不 在集合内的字符将会被匹配,比如 [^5] 将匹配所有字符,除了 ‘5’, [^^] 将匹配所有字符,除了 ‘^’. ^ 如果不在集合首位,就没有特殊含义。
  • 在集合内要匹配一个字符 ‘]’,有两种方法,要么就在它之前加上反斜杠,要么就把它放到集合首位。比如, [()[]{}] 和 [{}] 都可以匹配括号。
  • Unicode Technical Standard #18 里的嵌套集合和集合操作支持可能在未来添加。这将会改变语法,所以为了帮助这个改变,一个 FutureWarning 将会在有多义的情况里被 raise,包含以下几种情况,集合由 ‘[’ 开始,或者包含下列字符序列 ‘–’, ‘&&’, ‘~~’, 和 ‘||’。为了避免警告,需要将它们用反斜杠转义。
  • 在 3.7 版更改: 如果一个字符串构建的语义在未来会改变的话,一个 FutureWarning 会 raise 。
  1. |
  • A|B, A 和 B 可以是任意正则表达式,创建一个正则表达式,匹配 A 或者 B. 任意个正则表达式可以用 ‘|’ 连接。它也可以在组合(见下列)内使用。扫描目标字符串时, ‘|’ 分隔开的正则样式从左到右进行匹配。当一个样式完全匹配时,这个分支就被接受。意思就是,一旦 A 匹配成功, B 就不再进行匹配,即便它能产生一个更好的匹配。或者说,’|’ 操作符绝不贪婪。 如果要匹配 ‘|’ 字符,使用 |, 或者把它包含在字符集里,比如 [|].

需要仔细揣摩了,正则的深奥由实战而来,它总会有意想不到的无穷组合方式!!!

  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值