[英]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
方法搜索不重疊的匹配項,並且並非所有可以匹配的子字符串都包含在結果。
例如,在執行正則表達式aa
上abaca
, findall
將返回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.