Шаблон Python Regex не соответствует - PullRequest
2 голосов
/ 13 октября 2011

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

  1. ITEM.ID = 'item_clock';\r\n
  2. ITEM.Cost = 150;\r\n.

когда я запускаю свой шаблон регулярных выражений в первой строке, я получаю ожидаемый результат

>>> re.search("ITEM.(?P<key>[a-zA-Z]\w) = (?P<value>.*);", line).groupdict()
{'key': 'ID', 'value': "'item_clock'"}

однако, когда я запускаю его во второй строке, я не надеваюне получен объект Match.

Ответы [ 2 ]

7 голосов
/ 13 октября 2011

Регулярное выражение ищет ITEM., за которым следует буква, за которой следует ровно один символ слова (\w в регулярном выражении).

Вы, вероятно, имели в виду что-то вроде ITEM.(?P<key>[a-zA-Z]\w*) ... (обратите внимание на добавленную звездочку). Это будет искать ITEM., за которым следует буква, а затем ноль или более символов слова.

Также рекомендуется использовать необработанные строки для регулярных выражений, чтобы избежать ошибок, которые трудно обнаружить:

r"ITEM.(?P<key>[a-zA-Z]\w*) = (?P<value>.*);"

(обратите внимание на префикс r).

1 голос
/ 13 октября 2011

Принятый ответ правильный.Незначительные изменения ...

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

    r "\.* [a-zA-Z] \ w *) * = * (? P . *?) *; "

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...