Python Regex Question - PullRequest
       0

Python Regex Question

0 голосов
/ 24 июля 2010

У меня есть конечный тег, за которым следует перевод строки каретки (x0Dx0A), за которым следуют одна или несколько вкладок (x09), за которыми следует новый начальный тег.

Примерно так:

</tag1>x0Dx0Ax09x09x09<tag2> or </tag1>x0Dx0Ax09x09x09x09x09<tag2>

Какое регулярное выражение Python мне следует использовать, чтобы заменить его чем-то вроде этого:

</tag1><tag3>content</tag3><tag2>

Заранее спасибо.

1 Ответ

1 голос
/ 24 июля 2010

Вот код для чего-то вроде того, что вы говорите, что вам нужно:

>>> import re
>>> sample = '</tag1>\r\n\t\t\t\t<tag2>'
>>> sample
'</tag1>\r\n\t\t\t\t<tag2>'
>>> pattern = '(</tag1>)\r\n\t+(<tag2>)'
>>> replacement = r'\1<tag3>content</tag3>\2'
>>> re.sub(pattern, replacement, sample)
'</tag1><tag3>content</tag3><tag2>'
>>>

Обратите внимание, что \r\n\t+ может быть слишком конкретным, особенно если производство ваших входных данных не находится под вашим контролем.Возможно, лучше принять более общий \s* (ноль или более пробельных символов).

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

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