Regex инструмент для большого поиска и замены - PullRequest
2 голосов
/ 02 апреля 2009

Мне часто нужен инструмент, который позволил бы мне:

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

Должен ли я:

  1. потратьте 2 часа на создание такого инструмента
  2. используйте что-то, что кто-то уже создал (пожалуйста, предложите)
  3. научиться использовать язык, который особенно хорош в подобных вещах (Perl?)

Пример
У меня есть XML-документ, содержащий тысячи записей. Есть около 100 записей с известным полем значения, которые необходимо удалить. Я могу построить регулярное выражение для каждой записи. Выражение одинаково для 100 записей, за исключением части строки значения. Либо этот инструмент должен был бы иметь возможность циклически проходить один раз для каждого значения, либо только один раз с 100 ИЛИ членами (|) в выражении (это было бы огромно). В этом случае я заменяю совпадения на пустые, но в других случаях я переформатировал бы текст и заново вставил поле значения.

Ответы [ 4 ]

2 голосов
/ 02 апреля 2009

Я считаю, что вы должны написать вещь в Python . Библиотека python re великолепна:

# get the re library
import re

# this is the line to process
xml_line = "<stuff><bad i_am_naughty=\"True\"></bad></stuff>"
# compile a regex 
exp = re.compile ("(.*)(<bad.*bad>)(.*)")
# run the regex on the line
match = exp.search (xml_line)
# print out the groups the regex found
print match.groups ()

N.B. Вы также можете использовать библиотеки разбора Python XML , чтобы удалить ненужные элементы. Использование синтаксического анализа Python XMl упрощает некоторые сложности, которые я игнорировал в своем примере (несколько строк и т. Д.). Вместо примера разбора Python XML этот вопрос содержит несколько хороших ответов о разборе XML в Python.

1 голос
/ 02 апреля 2009

Я не совсем уверен, как выглядят ваши данные, но я бы рассмотрел написание инструмента на python в три этапа:

  1. преобразовать файл пути XML плюс переменная = значение в строки XML.path.variable = значение
  2. применить массивное регулярное выражение к каждой строке, возможно удалив строку из вывода
  3. преобразовать сокращенный список строк XML.path.variable = value обратно в XML
0 голосов
/ 02 апреля 2009

Существует большое количество модулей, которые можно использовать для обработки XML.

http://www.crummy.com/software/BeautifulSoup/ http://codespeak.net/lxml/

0 голосов
/ 02 апреля 2009

Я бы предложил не использовать регулярные выражения. XML обычно должен обрабатываться с помощью инструментов XML. Почему бы просто не использовать XSLT ?

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