1

我尝试运行以下代码:

lin = ',11'
pat = ',([11|01])$'
re.search(pat, lin)

因为 pat 有 ',11' 而 lin 也有 ',11' 我应该得到 re.search 返回的对象

但在这种情况下,它返回 None。

有人可以帮我吗?我对此很困惑。

4

4 回答 4

5

您正在使用字符类:[...]. 这些作为集合;您在其中命名的任何字符都将匹配。1您的字符类将匹配您在该类中命名的 3|0唯一字符。您没有在[...]字符类之后指定乘数,因此它只会匹配一个字符:

>>> re.match(',([11|01])$', ',1')
<_sre.SRE_Match object at 0x1106d1648>
>>> re.match(',([11|01])$', ',0')
<_sre.SRE_Match object at 0x1106d16c0>
>>> re.match(',([11|01])$', ',|')
<_sre.SRE_Match object at 0x1106d1648>

如果要匹配确切的字符,请删除该类:

pat = ',(11|01)$'

匹配文字字符1101

>>> re.match(',(11|01)$', ',11')
<_sre.SRE_Match object at 0x1106d16c0>
>>> re.match(',(11|01)$', ',01')
<_sre.SRE_Match object at 0x1106d1648>

或者,如果您仍想使用字符类:

pat = ',([01]1)$'

现在,括号不再需要对| or运算符进行分组,因此您可以删除这些以将事情简化为:

pat = ',[01]1$'

演示:

>>> re.match(',[01]1$', ',01')
<_sre.SRE_Match object at 0x1106bc5e0>
>>> re.match(',[01]1$', ',11')
<_sre.SRE_Match object at 0x1106bc648>
>>> re.match(',[01]1$', ',00') is None
True
>>> re.match(',[01]1$', ',10') is None
True
>>> re.match(',[01]1$', ',|') is None
True
于 2013-05-03T21:19:04.490 回答
4

由于[...]括号,您的正则表达式匹配一个字符,可能是01|.

我想你想要更多像,(11|01)$.

于 2013-05-03T21:19:22.637 回答
2

这有效:

re.search(r',(11|01)',lin)
于 2013-05-03T21:20:35.030 回答
0

[11|01]不是 11 or 01其实是1 or | or 0

尝试使用这个:

,[10]1$

那将是一个逗号,然后是[1 or 0]1然后是字符串末尾的锚点。

你也可以使用这个:

,((11)|(01))$
于 2013-05-03T21:18:33.643 回答