最后匹配的符号
问题描述:
我无法找到一个更具描述性的标题,但这里有一个例子:最后匹配的符号
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'。我已经使用额外的功能做了一个解决方法,但我希望使用相同的正则表达式更清晰和更一致的方式。
非常感谢。
答
re.search(r"\((?P<remixer>[^)]+) (Remix)\)", "Title (Blabla) (Menda Remix)")
答
使用[^()]+
,而不是.+
不匹配的括号。
答
我可能会做这样的:
m = re.search(r".*\((?P<remixer>.+) (Remix)\)", "Title (Blabla) (Menda Remix)")
答
只需添加一个$
的模式结束,大功告成:)
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
谢谢大家!你太快了! – Menda 2010-03-12 18:06:50