我有一些文字
<br />
blah
<br />
blah blah
我试图更改为:
<p>
blah
</p>
<p>
blah blah
</p>
我有以下正则表达式
newContent = re.sub("<br />(?=(.*(<br />)?\n)<br />)","<p>",newContent)
但这不会像我想要的那样工作。我想要任何东西在期待被替换之前和期待被替换<p>
之后</p>
这可能吗?
听听那些建议你使用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>
是简单的正则表达式,不需要拆分和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>
您不能使用正则表达式来做到这一点,因为它们只能替换原处的文本片段,而不是进一步传播结果。您所能做的只是一些像这样的解决方法:
s = "html code"
s = s.split("<br />");
s = "<p>" + "</p><p>".join(s) + "</p>"