例如,我们要删除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

07-23 09:26