2010-03-12 67 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