2

我有一些文字

<br />
blah
<br />
blah blah

我试图更改为:

<p>
blah
</p>
<p>
blah blah
</p>

我有以下正则表达式

newContent = re.sub("<br />(?=(.*(<br />)?\n)<br />)","<p>",newContent)

但这不会像我想要的那样工作。我想要任何东西在期待被替换之前和期待被替换<p>之后</p>

这可能吗?

4

3 回答 3

3

听听那些建议你使用html解析器的人,比如

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>
于 2013-10-25T13:57:27.740 回答
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>
于 2013-10-25T14:06:02.390 回答
1

您不能使用正则表达式来做到这一点,因为它们只能替换原处的文本片段,而不是进一步传播结果。您所能做的只是一些像这样的解决方法:

 s = "html code"
 s = s.split("<br />");
 s = "<p>" + "</p><p>".join(s) + "</p>"
于 2013-10-25T13:51:57.830 回答