Регулярное выражение Python: как заменить строку, кроме случаев, когда другая строка существует в той же строке?
Я исправляю некоторые статьиreplace.py
заменив"choeur" на "chœur".
Есть также ссылки на файлы в синтаксисе MediaWiki:
[[Fichier:Menditte (Pyr-Atl, Fr) choeur de l'église.JpG|thumb|Chœur de l'église]]
Редактирование такого рода вещи сломает ссылку. Я не могу использовать[]
потому что есть также описание ссылки:
[[Fichier:JeronimosRoyalTombs.Jpg|thumb|right|Tombeaux de [[Jean III de Portugal]] (à gauche) et de [[Catherine de Castille]] (à droite) dans la choeur de l'église]]
В этом случае заклинание должно быть исправлено.
Поэтому мне не нужно редактировать, если есть.jpg
на той же линии и после"choeur".
Моя проблема в том, что я не смог найти способ обработать логические выражения внутри регулярных выражений Python
1 ответ
Вы можете использовать негативный взгляд (?!...)
(не сопровождается):
шаблон:
(?i)\b(ch)oe(urs?\b)(?!.*\.jpg\b)
замена:
$1œ$2
О границах слова:
Границы слова используются для разделения букв \bchoeurs?\b
или же \.jpg\b
и сделает работу в большинстве случаев. Однако имейте в виду, что границы слова не будут работать с этой строкой: __choeur__
, Если необходимо, границы слов могут быть заменены на обходные пути, например:
(?:(?<=_)|\b)choeurs?(?=_|\b)