Путаница при использовании регулярных выражений для редактирования ini-файла значения ключа (Python)

Я пытаюсь увеличить свое регулярное выражение, используя его для редактирования INI-файла, основываясь на моих расплывчатых описаниях частей, которые я хочу изменить.

В частности, я пытаюсь обновить строку в файле, который описывает список каталогов, которые программа будет использовать для поиска библиотек VST. Для этого я использую следующее выражение:

r"^(?=.*?vst.*?=)(?=.*?[(path)|(directories)].*?=)(?P<key>.*?)\s?=\s?(?P<value>.*)$"

Т.е. я использую lookaheads, чтобы выяснить, есть ли упоминание "VST" наряду с некоторым упоминанием "пути" или "каталогов" перед знаком равенства (указывая, что они в ключе), а затем, если совпадение есть, я " m разбив результат на его группы значений ключей.

Тем не менее, я обнаружил, что это не работает, и он просто сопоставляет что-либо с VST.

Есть ли что-то, чего мне не хватает, чтобы не утвердить оба взгляда? (Также не уверен, перешел ли я за борт с вопросительными знаками)

Любая помощь приветствуется

Matt

1 ответ

Догадаться:

r"^(?=.*?vst.*?=)(?=.*?(?:path|directories).*?=)(?P<key>.*?)\s?=\s?(?P<value>.*)$"

Что было не так, так это то, что я пытался сказать "искать" путь "ИЛИ" каталоги ", используя

[(path)|(directories)]

... что было неверно, потому что это означало, что движок пытался захватить эти условные запросы в виде групп. (Не уверен, почему я не получил ошибку, хотя). Правильный способ задать это - использовать "группу без захвата".

(?:path|directories)
Другие вопросы по тегам