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

Ojo*_*mio 1 python regex

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

print re.sub('a*|b',  '', 'bcd')
Run Code Online (Sandbox Code Playgroud)

BCD

没有水珠的地方

print re.sub('a|b',  '', 'bcd')
Run Code Online (Sandbox Code Playgroud)

光盘

这是预期的.
我认为失败的选择不会阻止尝试其他人!

Ode*_*ded 7

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

所以,你最终在本场比赛的位置替换-一个''用bcd.

所以整个字符串返回.


从文档:

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

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

因此,''字符串的开头是零as 的出现,并被替换为repl.

  • 很好的答案.我只想补充说,通过使用你可以看到的替换字符串而不是空字符串,这些问题通常更容易调试,例如`re.sub('a*| b','replace','bcd')`.这清楚地表明比赛的第一部分没有失败. (2认同)