簡體   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