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

标签 python regex string

在 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.afindall 将返回 aba 作为唯一的匹配项,并且选择它作为最后一个匹配项,而上面的代码将返回 aca 作为匹配项。


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

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

关于python - 如何在python中的字符串中搜索最后一次出现的正则表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33232729/

相关文章:

ios - 如何快速防止标签中的孤儿?

python - 如何动态更改字符串中变量的值?

Python 正则表达式 : how to match anything up to a specific string and avoid backtraking when failin

python - 现代客户端/服务器身份验证技术

c - 正则表达式获取英文引号之间的字符串/单词

regex - 至少包含 1 个大写字母、1 个小写字母、1 个特殊字符、1 个数字和 1 个空格的字符串

regex - 查找匹配所有给定字符串的最简单的正则表达式

python - 如何在 Python 的方法中访问 "static"类变量?

C++ 将十进制字符串拆分为两个整数

将字符串输入与另一个字符串进行比较