Python的正则表达式,以删除所有不在两个其他标签之间的标签
我正在使用python,并希望从字符串中删除所有不包含在特定标签中的html标签。在这个例子中,我想删除所有未包含在<header>
标签</header>
中的html标签,也不删除该标签。Python的正则表达式,以删除所有不在两个其他标签之间的标签
例如:
<h1>Morning</h1>
<header>
<h1>Afternoon</h1>
<h2>Evening</h2>
</header>
<h2>Night</h2>
结果:
Morning
<header>
<h1>Afternoon</h1>
<h2>Evening</h2>
</header>
Night
我已经花了,但没有运气小时。 我知道下面会发现所有标签:
re.sub('<.*?>', '', mystring)
,这将找到标题标签内的任何东西:
re.sub('<header>.*?</header>', '', mystring)
但我怎么否定它,从而使第一正则表达式忽略了什么第二个正则表达式发现?任何帮助是极大的赞赏!谢谢! :)
您可以使用BeautifulSoup
快速且轻松地完成此任务,正如Josep Valls在评论中所述。具体方法如下:
from bs4 import BeautifulSoup
soup = BeautifulSoup('''<h1>Morning</h1>
<header>
<h1>Afternoon</h1>
<h2>Evening</h2>
</header>
<h2>Night</h2>''', 'html.parser')
for tag in soup.find_all(recursive=False):
if not tag.findChildren():
tag.unwrap()
print(soup)
此打印出:
Morning
<header>
<h1>Afternoon</h1>
<h2>Evening</h2>
</header>
Night
嘿COLDSPEED,谢谢你的所有帮助,但你能修改你的答案来帮助我修改我的问题吗?非常感谢:) – cullan
@cullan我很乐意提供帮助,但修改问题并完全重置上下文不是一个好主意,对未来的读者无益。你能否提出一个新的问题? –
@cullan复制您当前的问题,然后回滚您的更改。然后,发布一个新问题。 –
不要使用正则表达式来处理HTML(https://*.com/questions/701166/can-you-provide-some-examples-的 - 为什么 - 这 - 是 - 难以解析的XML和HTML的-与-A-REG)。学习如何使用Beautifulsoup,让你的生活更轻松。 –
我使用它来处理非常特定格式的HTML文档(每个文档都是完全相同的格式,并且对写入的内容有许多严格的规则),所以在标签等内部不会有任何这些通用html标签。我需要这个尽快完成,所以我现在没有时间,但是肯定会学到在不久的将来使用Beautifulsoup! – cullan
@cullan我真的很推荐BS4。所需要的只是一个快速的“点安装beautifulsoup4”,然后在我的答案中运行代码。 :) –