2016-08-24 45 views
2

我總是認爲正則表達式是這樣工作的,但我想我從來沒有像現在這樣打這樣的情況,我不知道解決這個問題的最好方法。如何最大正則表達式非貪心工作倒退

字符串來考慮:

apple 
apple 
apple 
cat 

我想使用類似蘋果*貓,然而,這第一個蘋果匹配給貓當我真正想要的最後一個蘋果和貓。?。

請記住這只是一個例子,我在尋找一個通用的方法來做到這一點(即告訴我,只是與蘋果和貓之間有一個換行符不會在我的現實情況下工作)

+2

你應該編輯這個更像你真正的問題。 –

+0

這與貪婪無關。請記住,正則表達式引擎從左到右搜索字符串,並返回最左邊位置的第一個結果。 –

+0

看看這個問題:http://stackoverflow.com/questions/406230/regular-expression-to-match-line-that-doesnt-contain-a-word –

回答

4

您可以在Python中使用基於正則表達式tempered greedy token這種負前瞻:

reg = re.compile(r'apple(?:(?!apple).)*cat', re.DOTALL) 

RegEx Demo

(?:(?!apple).)*將0以上不在下一個POS有apple任何字符匹配從而確保我們的比賽中沒有apple。請注意,對於比賽中的每個角色都會聲明負向預測。

+0

我在python的文檔中找不到'tempered greedy token'。這句話剛剛彌補了嗎?該網站是一個微不足道的垃圾,並沒有任何發展深入理解正則表達式。我確實看到他的一個頁面請求通過http://www.rexegg.com/regex-consultant.html – sln

+0

我不認爲Python正則表達式文檔將有任何參考。短語「脾氣暴躁的令牌」沒有很好的記錄,但是這種模式的「(?:(?!apple)。)*'是相當通用的並且衆所周知。 – anubhava

+0

當然。由於我從來沒有聽說過它,我必須看看。就像我說的那樣,一堆製作了瑣碎的垃圾。 – sln