我有一些像
这样的文字<br />
blah
<br />
blah blah
我试图改为:
<p>
blah
</p>
<p>
blah blah
</p>
我有以下正则表达式
newContent = re.sub("<br />(?=(.*(<br />)?\n)<br />)","<p>",newContent)
但这并不是我想要的。在期待被<p>
替换之前我想要任何事情,并且期待被</p>
替换
这可能吗?
答案 0 :(得分:3)
倾听那些建议您使用html
解析器的人,例如beautifulsoup:
from bs4 import BeautifulSoup
soup = BeautifulSoup(open('htmlfile', 'r'), 'html')
for br in soup.find_all('br'):
p = soup.new_tag('p')
p.string = br.next_sibling.extract()
br.replace_with(p)
print(soup.prettify())
像以下一样运行:
python3 script.py
产量:
<html>
<body>
<p>
blah
</p>
<p>
blah blah
</p>
</body>
</html>
答案 1 :(得分:1)
你不能用正则表达式做到这一点,因为它们只能替换文本片段,而不能进一步传播结果。所有你能做的只是一些像这样的解决方法:
s = "html code"
s = s.split("<br />");
s = "<p>" + "</p><p>".join(s) + "</p>"
答案 2 :(得分:1)
这是简单的正则表达式,不需要拆分和BeautifulSoup。
import re
t = '(.+)(blah)(.+)(blah blah)'
r = r"""<p>
\2
</p>
<p>
\4
</p>
"""
s = """<br />
blah
<br />
blah blah
"""
print(re.sub(t, r, s, flags=re.S))
它给出了
<p>
blah
</p>
<p>
blah blah
</p>