我找不到更具描述性的标题,但这里有一个例子:
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 :(得分: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:我还将.+
更改为[^)]+
,因此您无法在此过程中匹配任何)
。