BeautifulSoup:在遍历 Tag.strings 时编辑 Tag.strings

BeautifulSoup: edit Tag.strings while iterating over Tag.strings

有很多关于编辑标签的 stringstrings 属性的问题,但是我可以看到的已接受答案中的 none 解决了我遇到的问题.

如果您迭代 Tag.strings 生成器,只要您使用 .replace_with() 编辑一个项目,编辑就会成功,但是生成器会立即退出,您无法继续迭代其余部分Tag.strings 中的项目。以下代码对此进行了演示:

from bs4 import BeautifulSoup
soup = BeautifulSoup('<p>This <a href="../t.html">is my</a> example.</p>')
for s in soup.strings:
    s.replace_with(s.replace(' ', ''))
print(soup)
# <html><body><p>This<a href="../t.html">is my</a> example.</p></body></html>

同时迭代和编辑 Tag.strings 的最佳方法是什么?

此(低效)解决方案使用 while 循环来检查是否所有需要更改的内容都已更改:

from bs4 import BeautifulSoup
soup = BeautifulSoup('<p>This <a href="../t.html">is my</a> example.</p>')
while any(' ' in s for s in soup.strings):
    for s in soup.strings:
        s.replace_with(s.replace(' ', ''))
print(soup)
# <html><body><p>This<a href="../t.html">ismy</a>example.</p></body></html>

希望有更多 efficient/elegant 解决方案。