Заменить строку внутри тега с помощью регулярных выражений - PullRequest
0 голосов
/ 17 декабря 2018

Я хочу использовать регулярные выражения для замены <p ....> на '' и </p> на <br>:

<p style="text-align:center;">1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...<\p>

Я пытался:

re.sub("[\<\[].*?[\\>\\]]", '' '', x)

, но это стерло все.

Может ли кто-нибудь мне помочь?

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

Вы никогда не должны использовать регулярные выражения для XML / HTML.XML хорошо умеет вкладывать теги, а вложенные теги являются кошмаром для регулярных выражений.Вы должны использовать lxml BeautifoulSoup здесь.

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

Предполагая, что у вас есть (обратите внимание на / p вместо \ p ):

x = '<p style="text-align:center;">1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...</p>'

вы можете использовать:

>>> re.sub(r'<p.*?>(.*?)</p>', r'\1<br/>', x)
'1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...<br/>'
0 голосов
/ 17 декабря 2018

Одним из вариантов может быть использование группы захвата для извлечения текста из тега, а затем добавление <br> в конец:

pat = re.compile(r'<p[^>]*>(.*)<\\p>')  # or </p>, as required

print(" {}<br>".format(pat.match(x).group(1)))
# 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...<br>

Или вы можете сделать две замены

pat1 = re.compile(r'<p[^>]*>')
pat2 = re.compile(r'<\\p>')

pat1.sub(' ', pat2.sub('<br>', x))
# 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...<br>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...