我想使用正则表达式将<p ....>
替换为'',将</p>
替换为<br>
:
<p style="text-align:center;">1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...<\p>
我尝试过:
re.sub("[\<\[].*?[\\>\\]]", '' '', x)
但是它擦除了所有内容。
有人可以帮我吗?
答案 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/>'