我尝试运行以下代码:
lin = ',11'
pat = ',([11|01])$'
re.search(pat, lin)
因为pat有',11'而且lin也有',11'我应该得到re.search返回的对象
但在这种情况下,它返回None。
有人可以帮帮我吗?我很困惑。
答案 0 :(得分:5)
您正在使用字符类:[...]
。这些充当集;您在其中命名的任何字符都将匹配。您的角色类将匹配任何1
,|
或0
字符,即您在课程中命名的3个唯一字符。您没有在[...]
字符类之后指定乘数,因此它只匹配一个字符:
>>> 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)$'
匹配文字字符11
或01
:
>>> 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)$'
现在不再需要括号来对|
或运算符进行分组,因此您可以删除这些运算符以简化为:
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
答案 1 :(得分:4)
由于[...]
括号,您的正则表达式会匹配一个字符,可能是0
,1
或|
。
我认为你想要更像,(11|01)$
。
答案 2 :(得分:2)
这有效:
re.search(r',(11|01)',lin)
答案 3 :(得分:0)
[11|01]
不 11 or 01
,实际上是1 or | or 0
。
尝试使用:
,[10]1$
这将是逗号,然后是[1 or 0]
,然后是1
,然后是字符串末尾的锚点。
你也可以使用它:
,((11)|(01))$