Python正则表达式创建

mxa*_*ant 1 python regex

我尝试运行以下代码:

lin = ',11'
pat = ',([11|01])$'
re.search(pat, lin)
Run Code Online (Sandbox Code Playgroud)

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

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

有人可以帮帮我吗?我很困惑.

Mar*_*ers 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>
Run Code Online (Sandbox Code Playgroud)

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

pat = ',(11|01)$'
Run Code Online (Sandbox Code Playgroud)

它匹配文字字符1101:

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

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

pat = ',([01]1)$'
Run Code Online (Sandbox Code Playgroud)

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

pat = ',[01]1$'
Run Code Online (Sandbox Code Playgroud)

演示:

>>> 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
Run Code Online (Sandbox Code Playgroud)