繁体   English   中英

如何在python中的字符串中搜索最后一次出现的正则表达式?

[英]How to search for the last occurrence of a regular expression in a string in python?

在 python 中,我可以轻松地在这样的字符串中搜索第一次出现的正则表达式:

import re
re.search("pattern", "target_text")

现在我需要在字符串中找到最后一次出现的正则表达式,这似乎不受re模块的支持。

我可以将字符串反转为“搜索第一次出现”,但我还需要反转正则表达式,这是一个更难的问题。

我也可以从左到右迭代查找所有出现的事件,只保留最后一个,但这看起来很尴尬。

有没有一种聪明的方法来找到最正确的事件?

一种方法是在正则表达式前加上(?s:.*)并强制引擎尝试在最远位置匹配并逐渐退出:

re.search("(?s:.*)pattern", "target_text")

请注意,此方法的结果可能与re.findall("pattern", "target_text")[-1] ,因为findall方法搜索不重叠的匹配项,并且并非所有可以匹配的子字符串都包含在结果。

例如,在执行正则表达式aaabacafindall将返回aba作为唯一的匹配,并选择它作为最后一场比赛,而上面的代码将返回aca随着比赛。


另一种选择是使用regex包,它支持REVERSE匹配模式。

结果或多或少与上面描述的在re打包中使用(?s:.*)的方法相同。 但是,由于我自己还没有尝试过这个包,所以不清楚反向引用在REVERSE模式下是如何工作的——在这种情况下,模式可能需要修改。

import re
re.search("pattern(?!.*pattern)", "target_text")

或者

import re
re.findall("pattern", "target_text")[-1]

您可以使用这两种方法。

如果你想要positions使用

x="abc abc abc"
print [(i.start(),i.end(),i.group()) for i in re.finditer(r"abc",x)][-1]

一种方法是使用拆分。 例如,如果您想获取此示例字符串中 ':' 之后的最后一组:

mystr = 'dafdsaf:ewrewre:cvdsfad:ewrerae'
':'.join(mystr.split(':')[-1:])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM