python - 在python中,正规表达式如何在关键字首次出现时删除字符串?

例如,我们想从123a45b6a789中删除第一个a之前的所有字符。 如何获得45b6a789的正确结果?

我试过 re.sub('.*a','','123a45b6a789'),但是,它给了 789

谢谢。

时间:

首先,使用非贪婪的通配符 *? 将阻止整个字符串直到最后一个 a 被吞噬,

但那还不够。 这里代码将说明问题:


print(re.findall(r'.*?a', '123a45b6a789')) # => ['123', '45b6'] # <-- whoops, matched twice



因此,可以使用 re.sub 计数参数将自己限制为第一个匹配项:


re.sub(r'.*?a', '', '123a45b6a789', 1)


# ^^^



或者使用行首锚:


re.sub(r'^.*?a', '', '123a45b6a789')



或者,完全跳过正规表达式,并且使用 constt的解决方案


>>> s = '123a45b6a789'


>>> s[s.find('a') + 1:]


'45b6a789'



好吧,有很多不同的方法来给猫换皮肤。 但是,你可以执行如下操作:


def removeCharBeforeKey(string, key):


 return key.join(string.split(key)[1:]))



其中key是关键字(a),例如, 这个字符串就是这个例子中的输入(123a45b6a789 ),

这就是说可以在关键字上拆分字符串,但是,在第一个字符串之后,重新加入 。 你也可以 find 索引,只做一个索引。

使用非贪婪 ?


re.sub('.*?a', '', '123a45b6a789')` but it gives `789`



我建议在regex webapps上试用正则表达式来帮助揭开它的神秘面纱。 只是谷歌正则表达式,你会找到一个。


import re


print re.sub("^[^a]+a", u"", u"123a45b6a789")


print re.sub("^[^a]+", u"", u"123a45b6a789")



...