如何在BeautifulSoup4中替换嵌套标记的文本?

时间:2017-06-23 18:53:20

标签: python html parsing beautifulsoup markdown

我正在开发一个格式化HTML的程序,用于reddit的注释。所以,例如,如果我有:

<i> This is Italics <b> but this is bold and italics</b>  and back to italics <i>

我想将其格式化为

*This is Italics* ***but this is bold and italics*** *and back to italics*

所以它会产生: 这是斜体 ,但这是粗体 并返回斜体

我无法找到标签内的所有标签,并用适当数量的星号替换它们,而不会弄乱格式化。我尝试了几件事,但最近的是:

italics = soup.find_all('i')
for i in range(len(italics)):
    bold = italics[i].find_all('b')
    for j in bold:
        bold[i].replace_with('***' + bold[i].text + '***')

但是我在尝试编辑嵌套标签时遇到错误,我不想用***修改每个粗体标签,只是斜体内的标签,所以它保持格式化,剩下的我可以改为**。 / p>

1 个答案:

答案 0 :(得分:0)

也许更容易(理解)这样的事情。

italics = soup.find_all('i')
for i in italics:
    print(i.b)
    if i.b:
        i.b.replace_with('***' +i.b.text +'***')

print(soup)

整个代码,愚蠢但有效

italics = soup.find_all('i')
for i in italics:
    print(i.b)
    if i.b:
        i.b.replace_with('* ***'+ i.b.text +'*** *')
    i.replace_with('*'+i.text+ '*')

print(soup)