Разбор шаблонной схемы с помощью Python и регулярных выражений - PullRequest
0 голосов
/ 30 марта 2009

Я работаю над сценарием для работы по извлечению данных из старой схемы механизма шаблонов:

[%price%]
{
$54.99
}
[%/price%]

[%model%]
{
WRT54G
}
[%/model%]

[%brand%]{
LINKSYS
}
[%/brand%]

все в [%%] является ключом, а все в {} является значением. Используя Python и регулярные выражения, я смог получить это далеко: (? <= [%) (? P \ w *?) (? = \%]) </p>

, который возвращает ['цена', 'модель', 'марка']

У меня просто проблема с получением соответствия скобочных данных как значения

Ответы [ 3 ]

4 голосов
/ 30 марта 2009

Я согласен с Девином, что одно регулярное выражение - не лучшее решение. Если есть какие-то странные случаи, которые не обрабатываются вашим регулярным выражением, существует реальный риск, который вы не узнаете.

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

Вы должны быть в состоянии написать что-то подобное в python примерно в 30-40 строках кода.

0 голосов
/ 30 марта 2009

только для улыбок:

import re
RE_kv = re.compile("\[%(.*)%\].*?\n?\s*{\s*(.*)")
matches = re.findall(RE_kv, test, re.M)
for k, v in matches:
    print k, v

выход:

price $54.99
model WRT54G
brand LINKSYS

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

0 голосов
/ 30 марта 2009

Похоже, что было бы легче сделать с re.Scanner (к сожалению, без документов), чем с одним регулярным выражением.

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