我需要匹配以下几组输入:
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.
没错。方括号表示字符组。 [_|] 将只匹配一个下划线或一个竖线,除此之外别无其他。换句话说,当竖线出现在字符组中时,它就失去了它的特殊意义。
