Последний соответствующий символ в регулярном выражении - PullRequest
2 голосов
/ 12 марта 2010

Я не смог найти более описательный заголовок, но здесь есть пример:

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 ]

3 голосов
/ 12 марта 2010
re.search(r"\((?P<remixer>[^)]+) (Remix)\)", "Title (Blabla) (Menda Remix)")
1 голос
/ 12 марта 2010

Просто добавьте $ в конец шаблона, и все готово:)

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: Я также изменил .+ на [^)]+, поэтому вы не найдете ни одного ) в процессе.

1 голос
/ 12 марта 2010

Я бы, наверное, сделал это:

m = re.search(r".*\((?P<remixer>.+) (Remix)\)", "Title (Blabla) (Menda Remix)")
1 голос
/ 12 марта 2010

Используйте [^()]+ вместо .+, чтобы не совпадать с круглыми скобками.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...