使用正则表达式替换标签内的字符串

时间:2018-12-17 15:18:02

标签: python regex python-3.x

我想使用正则表达式将<p ....>替换为'',将</p>替换为<br>

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

我尝试过:

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

但是它擦除了所有内容。

有人可以帮我吗?

2 个答案:

答案 0 :(得分:2)

一种选择是使用捕获组将文本从标签中取出,然后在末尾添加<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>

答案 1 :(得分:2)

对于XML / HTML,绝对不要使用正则表达式。 XML擅长嵌套标签,而嵌套标签是正则表达式的噩梦。您应该在这里使用BeautifoulSoup的lxml。

话虽这么说,对于非常简单的用例,正则表达式可以执行这些工作,前提是您可以确保不发生嵌套

假设您已经拥有(请注意 / 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/>'