例如,我们要删除a
中第一个123a45b6a789
之前的所有字符。如何获得45b6a789
的正确结果?
我尝试了re.sub('.*a', '', '123a45b6a789')
,但它给出了789
。
谢谢。
最佳答案
首先,使用非贪婪的通配符*?
可以防止直到最后一个a
的整个字符串被吞噬。
但这还不够。此代码将说明问题:
print(re.findall(r'.*?a', '123a45b6a789')) # => ['123', '45b6'] # <-- whoops, matched twice
因此,您可以使用
re.sub
的count参数将自己限制为第一个匹配项:re.sub(r'.*?a', '', '123a45b6a789', 1)
# ^^^
或使用行首锚:
re.sub(r'^.*?a', '', '123a45b6a789')
或者,完全跳过正则表达式并使用constt's solution。