Путаница при использовании регулярных выражений для редактирования 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)