在 python 中,我可以像这样轻松地搜索字符串中第一次出现的正则表达式:
import re
re.search("pattern", "target_text")
现在我需要找到字符串中最后一次出现的正则表达式,这似乎不受 re
模块的支持。
我可以将字符串反转为“搜索第一次出现”,但我还需要反转正则表达式,这是一个更难的问题。
我也可以迭代从左到右查找所有出现的地方,只保留最后一个,但这看起来很尴尬。
是否有一种聪明的方法来找到最正确的事件?
最佳答案
一种方法是在正则表达式前加上(?s:.*)
并强制引擎尝试在最远的位置进行匹配并逐渐后退:
re.search("(?s:.*)pattern", "target_text")
请注意,此方法的结果可能不同于 re.findall("pattern", "target_text")[-1]
,因为 findall
方法搜索对于非重叠匹配,并不是所有可以匹配的子字符串都包含在结果中。
例如,在 abaca
上执行正则表达式 a.a
,findall
将返回 aba
作为唯一的匹配项,并且选择它作为最后一个匹配项,而上面的代码将返回 aca
作为匹配项。
另一种选择是使用 regex
包,支持REVERSE
匹配方式。
结果将或多或少与上述 re
包中的 (?s:.*)
方法相同。然而,由于我自己还没有尝试过这个包,所以不清楚反向引用在 REVERSE
模式下是如何工作的——在这种情况下可能需要修改模式。
关于python - 如何在python中的字符串中搜索最后一次出现的正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33232729/