PYTHON正则表达式的中括号[]和竖线的详细讲解
[] 和 | 的详解讲解
在之前写过⼏篇关于正则表达式的基本使⽤概念,但是,对其中较为不常⽤或者经常使⽤其基本功能,缺乏了对其进⼀步的理解。在做字符串匹配时,遇到⼀个问题:如何执⾏正则表达式的或?
经过再⼀次的理解概念和实战,有了⼀定的理解。
我们还是来看看如何操作吧。
import re
string1 ="adsferf Novel234324fff dfasfdfda"
string2 ="adfadfa EN23423.2dfafd asdfa"
rgx = repile(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 。
2. |
A|B, A 和 B 可以是任意正则表达式,创建⼀个正则表达式,匹配 A 或者 B. 任意个正则表达式可以⽤ ‘|’ 连接。它也可以在组合(见下列)内使⽤。扫描⽬标字符串时, ‘|’ 分隔开的正则样式从左到右进⾏
匹配。当⼀个样式完全匹配时,这个分⽀就被接受。意思就是,⼀旦 A 匹配成功, B 就不再进⾏匹配,即便它能产⽣⼀个更好的匹配。或者说,’|’ 操作符绝不贪婪。 如果要匹配 ‘|’字符,使⽤ |, 或者把它包含在字符集⾥,⽐如 [|].
需要仔细揣摩了,正则的深奥由实战⽽来,它总会有意想不到的⽆穷组合⽅式
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论