正则表达式中的最后匹配符号

时间:2010-03-12 17:57:55

标签: python regex

我找不到更具描述性的标题,但这里有一个例子:

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'。我已经使用额外的函数对此进行了解决方法,但我希望使用相同的正则表达式更清晰,更一致。

非常感谢你们。

4 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

使用[^()]+代替.+以不匹配括号。

答案 2 :(得分:1)

我可能会这样做:

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

答案 3 :(得分: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:我还将.+更改为[^)]+,因此您无法在此过程中匹配任何)