sub(' a * | b','',' bcd') - > bcd WAT?

时间:2014-05-20 14:50:35

标签: python regex

今天我偶然发现了正则表达式中的奇怪行为 - 匹配。我无法解释它,虽然我认为我对正则表达式很有经验

print re.sub('a*|b',  '', 'bcd')
  

BCD

其中没有glob

print re.sub('a|b',  '', 'bcd')
  

CD

预期。
我认为失败的替代方案不会阻止尝试其他人!

1 个答案:

答案 0 :(得分:7)

a* 始终匹配(零到无限数量的a个字符。)

因此,您最终会在匹配位置进行替换 - ''bcd

所以整个字符串都会返回。


来自documentation

  

re.sub(pattern,repl,string,count = 0,flags = 0)

     

返回通过替换repl替换字符串中最左边非重叠模式而获得的字符串。

因此,''字符串的开头出现为零a,并被repl取代。