我知道[]表示一组允许的字符-
>>> 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')但是..。今天我遇到了一个在括号中有竖线的表达式,用来定义相互排斥的模式-
>>> 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中,括号本身用于定义匹配文本的逻辑组。如果我使用第二种技巧,那么我如何在两个作业中都使用括号?
发布于 2011-07-10 15:25:49
在这种情况下,它是相同的。
然而,交替并不仅限于单个字符。例如,
^(hello|world)$将匹配"hello“或"world”(并且只有这两个输入),而
^[helloworld]$将只匹配单个字符("h“或"w”或"d“等)。
祝你编码愉快。
发布于 2011-07-10 15:26:38
[ab]匹配一个字符(a或b),并且不捕获该组。(a|b)捕获a或b,并对其进行匹配。在本例中,差别不大,但在更复杂的情况下,[]只能包含字符和字符类,而(|)可以在管道的两端包含任意复杂的正则表达式
发布于 2011-07-10 15:31:24
在您给出的示例中,它们是可互换的。有一些不同之处值得注意:
在字符类方括号中,除了短划线、方括号或插入符号^(但前提是它是第一个字符)之外,您不需要对任何内容进行转义。
括号捕获匹配项,以便您以后可以引用它们。字符类匹配不能做到这一点。
可以在括号中匹配多字符字符串,但不能在字符类中匹配
https://stackoverflow.com/questions/6639820
复制相似问题