Регулярное выражение 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)

Другие вопросы по тегам