#python #regex #pattern-matching #regex-lookarounds #regexp-replace
Вопрос:
В приведенной ниже строке я пытаюсь получить подстроку (2005, Penguin Classics)
подстроки.
Маршалл Б. Розенберг Доктор философии — Удивительная цель Anger_ За пределами управления гневом_ Поиск дара (Руководства по ненасильственному общению) (2005, Penguin Classics) AAA.pdf
Я делаю это, чтобы изменить подстроку на just (2005).
Ниже приведено мое текущее решение, но оно соответствует обоим (Nonviolent Communication Guides)
и (2005, Penguin Classics)
. Есть идеи, как это исправить?
import re
parentheses_pattern = "(([^)] ))*$"
reg = re.search(parentheses_pattern, filename)
year = reg.group()
year = year[:5] ")"
filename = re.sub(parentheses_pattern,year,filename)
Ответ №1:
Может быть, это сработает?
(d , .*)
Хорошее место для проверки вашего регулярного выражения-это: https://rubular.com/
На всякий случай, если это пригодится! 🙂
Комментарии:
1. Спасибо! Разве это не сработает, если первая подстрока будет содержать начальные цифры?
2. Это было бы не так из-за запятой и пробела в регулярном выражении. Так что даже если это: […](23 Руководства по ненасильственному общению) (2005, Penguin Classics)[…] он все равно выберет нужную вам подстроку.
Ответ №2:
Возможно, это поможет:
r"(([^)] ))[^(]*$"
Комментарии:
1. Спасибо! Какая польза от символа r в начале?
2. Кстати, это не работает, так как усекает расширение файла (.pdf) в конце
3. Я думал, что цель состояла в том, чтобы сопоставить содержимое в последнем вхождении круглых скобок, что и делает шаблон. В любом случае, вы можете попробовать
r"(([^)] ))(?=[^(]*$)"
вместо этого.