Skip to main content
 首页 » 编程设计

Python 正则表达式 : How to specify an optional match (for potentially empty sub expression)

2025年05月04日32zhwl

我需要匹配以下几组输入:

foo_abc_bar   
foo_bar 

并得到“abc”或一个空字符串作为结果。

所以这是我写的正则表达式:

r'foo_(abc|)[_|]bar'

但出于某种原因,这与我给出的第二个字符串不匹配。

进一步检查,我发现 [_|] 不匹配空字符串。

那么,我该如何解决这个问题呢?

请您参考如下方法:

要使 abc_ 可选,您可以使用 question mark operator :

(abc_)? 

因此,整个正则表达式变成:

r'foo_(abc_)?bar' 

使用此正则表达式,第二个下划线(如果存在)将成为捕获组的一部分。如果您不希望这样,您可以在匹配后使用 .rstrip('_') 删除它,或者使用稍微复杂一些的正则表达式:

r'foo_(?:(abc)_)?bar' 

I found that [_|] does not match an empty string.

没错。方括号表示字符组。 [_|] 将只匹配一个下划线或一个竖线,除此之外别无其他。换句话说,当竖线出现在字符组中时,它就失去了它的特殊意义。