Skip to main content
 首页 » 编程设计

Python 正则表达式创建

2025年05月04日21qq号

我尝试运行以下代码:

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

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

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

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

请您参考如下方法:

您正在使用字符类:[...]。这些充当集合;您在其中命名的任何字符都将匹配。您的字符类将匹配任何 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