首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >正则表达式匹配中的差异b/w [ab]和(a|b)?

正则表达式匹配中的差异b/w [ab]和(a|b)?
EN

Stack Overflow用户
提问于 2011-07-10 15:23:33
回答 3查看 44.7K关注 0票数 18

我知道[]表示一组允许的字符-

代码语言:javascript
复制
>>> p = r'^[ab]$'
>>> 
>>> re.search(p, '')
>>> re.search(p, 'a')
<_sre.SRE_Match object at 0x1004823d8>
>>> re.search(p, 'b')
<_sre.SRE_Match object at 0x100482370>
>>> re.search(p, 'ab')
>>> re.search(p, 'ba')

但是..。今天我遇到了一个在括号中有竖线的表达式,用来定义相互排斥的模式-

代码语言:javascript
复制
>>> q = r'^(a|b)$'
>>> 
>>> re.search(q, '')
>>> re.search(q, 'a')
<_sre.SRE_Match object at 0x100498dc8>
>>> re.search(q, 'b')
<_sre.SRE_Match object at 0x100498e40>
>>> re.search(q, 'ab')
>>> re.search(q, 'ba')

这似乎模仿了上面的相同功能,或者我错过了什么?

PS:在Python中,括号本身用于定义匹配文本的逻辑组。如果我使用第二种技巧,那么我如何在两个作业中都使用括号?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-10 15:25:49

在这种情况下,它是相同的。

然而,交替并不仅限于单个字符。例如,

代码语言:javascript
复制
^(hello|world)$

将匹配"hello“或"world”(并且只有这两个输入),而

代码语言:javascript
复制
^[helloworld]$

将只匹配单个字符("h“或"w”或"d“等)。

祝你编码愉快。

票数 35
EN

Stack Overflow用户

发布于 2011-07-10 15:26:38

[ab]匹配一个字符(a或b),并且不捕获该组。(a|b)捕获a或b,并对其进行匹配。在本例中,差别不大,但在更复杂的情况下,[]只能包含字符和字符类,而(|)可以在管道的两端包含任意复杂的正则表达式

票数 15
EN

Stack Overflow用户

发布于 2011-07-10 15:31:24

在您给出的示例中,它们是可互换的。有一些不同之处值得注意:

在字符类方括号中,除了短划线、方括号或插入符号^(但前提是它是第一个字符)之外,您不需要对任何内容进行转义。

括号捕获匹配项,以便您以后可以引用它们。字符类匹配不能做到这一点。

可以在括号中匹配多字符字符串,但不能在字符类中匹配

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6639820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档