2010-03-12 103 views
2

我無法找到一個更具描述性的標題,但這裏有一個例子:最後匹配的符號

import re 
m = re.search(r"\((?P<remixer>.+) (Remix)\)", "Title (Menda Remix)") 
m.group("remixer") # returns 'Menda' OK 
m = re.search(r"\((?P<remixer>.+) (Remix)\)", "Title (Blabla) (Menda Remix)") 
m.group("remixer") # returns 'Blabla) (Menda' FAIL 

此正則表達式找到的第一個括號,我想最後一個括號匹配始終得到'Menda'。我已經使用額外的功能做了一個解決方法,但我希望使用相同的正則表達式更清晰和更一致的方式。

非常感謝。

+0

謝謝大家!你太快了! – Menda 2010-03-12 18:06:50

回答

3
re.search(r"\((?P<remixer>[^)]+) (Remix)\)", "Title (Blabla) (Menda Remix)") 
1

使用[^()]+,而不是.+不匹配的括號。

1

我可能會做這樣的:

m = re.search(r".*\((?P<remixer>.+) (Remix)\)", "Title (Blabla) (Menda Remix)") 
1

只需添加一個$的模式結束,大功告成:)

import re 
m = re.search(r"\((?P<remixer>[^)]+) (Remix)\)$", "Title (Menda Remix)") 
print m.group("remixer") # returns 'Menda' OK 
m = re.search(r"\((?P<remixer>[^)]+) (Remix)\)$", "Title (Blabla) (Menda Remix)") 
print m.group("remixer") # returns 'Blabla) (Menda' FAIL 

PS:我也改變了.+[^)]+,所以你在這個過程中不會匹配任何)

+0

它匹配的原因與'$'沒有任何關係,而且全部改爲字符類 – SilentGhost 2010-03-12 18:05:40

+0

如果有更多的匹配比它只能得到最後一個匹配,所以它仍然是一個有用的加法 – Wolph 2010-03-12 18:33:33