gpt4 book ai didi

python - 用html文档中的元素替换多个字符串

转载 作者:行者123 更新时间:2023-12-01 01:14:43 25 4
gpt4 key购买 nike

我有多个字符串,我想将它们包裹在 HTML 文档中的 HTML 标签中。我想保留文本不变,但将字符串替换为包含该字符串的 HTML 元素。

此外,我要替换的一些字符串包含我要替换的其他字符串。在这些情况下,我想应用较大字符串的替换并忽略较小字符串的替换。

此外,我只想在这些字符串完全包含在同一元素中时执行此替换。

这是我的替换列表。

replacement_list = [
('foo', '<span title="foo" class="customclass34">foo</span>'),
('foo bar', '<span id="id21" class="customclass79">foo bar</span>')
]

给定以下 html:

<html>
<body>
<p>Paragraph contains foo</p>
<p>Paragraph contains foo bar</p>
</body>
</html>

我想替换为:

<html>
<body>
<p>Paragraph contains <span title="foo" class="customclass34">foo</span></p>
<p>Paragraph contains <span id="id79" class="customclass79">foo bar</span</p>
</body>
</html>

到目前为止,我已经尝试使用 BeautifulSoup 库并按字符串长度递减的顺序循环遍历我的替换列表,我可以找到我的字符串并将其替换为其他字符串,但我不知道如何插入HTML 在这些点上。或者是否有更好的方法。无论我是否将其转换为字符串,尝试使用 soup.new_tag 对象执行字符串替换都会失败。

编辑:意识到我给出的示例甚至不符合我自己的规则,修改了示例。

最佳答案

我认为这非常接近您正在寻找的内容。您可以使用 soup.find_all(string=True) 仅获取 NavigableString 元素,然后进行替换。

from bs4 import BeautifulSoup
html="""
<html>
<body>
<p>Paragraph contains foo</p>
<p>Paragraph contains foo bar</p>
</body>
</html>
"""
replacement_list = [
('foo', '<span title="foo" class="customclass34">foo</span>'),
('foo bar', '<span id="id21" class="customclass79">foo bar</span>')
]
soup=BeautifulSoup(html,'html.parser')
for s in soup.find_all(string=True):
for item in replacement_list[::-1]: #assuming that it is in ascending order of length
key,val=item
if key in s:
new_s=s.replace(key,val)
s.replace_with(BeautifulSoup(new_s,'html.parser')) #restrict youself to this built-in parser
break#break on 1st match
print(soup)

#generate a new valid soup that treats span as seperate tag if you want
soup=BeautifulSoup(str(soup),'html.parser')
print(soup.find_all('span'))

输出:

<html>
<body>
<p>Paragraph contains <span class="customclass34" title="foo">foo</span></p>
<p>Paragraph contains <span class="customclass79" id="id21">foo bar</span></p>
</body>
</html>

[<span class="customclass34" title="foo">foo</span>, <span class="customclass79" id="id21">foo bar</span>]

关于python - 用html文档中的元素替换多个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54460469/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com