如何用其子项替换span并对BeautifulSoup中的内部文本执行正则表达式

时间:2013-10-11 12:27:36

标签: python regex beautifulsoup

我的标签很少,如

<span attrib="5_5"> <font size="3">Text:Hello World </font> </span>
<span attrib="5_5"> <font size="1">Text_Hello New World </font> </span>

与此同时,有些人不想要字体...所以他们没有它

<span attrib="5_5"> Text:Hello World  </span>
<span attrib="5_5"> Text_Hello New World </span>

我需要将所有这些转换为

<font size="3">Test_Hello_World_5_5</font>
<font size="1">Text_Hello_New_World_5_5</font

我如何在BeautifulSoup中执行此操作?我可以做正则表达式并替换文本,但我丢失了字体。我需要保留孩子,并在同一个循环中使用正则表达式重新发送内部文本。谁能告诉我怎么做?基本上我想要一个each.replaceWithChildren,然后在SAME LOOP中更改each.text ...因为我不能丢失上下文。 5_5是来自父span的属性的数字。

在伪代码中我想要类似的东西:

span是所有span标签的美丽汤系列。

for each in span:
   span.replaceWithChildren()
   each.text = something

1 个答案:

答案 0 :(得分:3)

类似的东西:

for x in doc.findAll('span'):
    s = x["attrib"]
    t = x.find('font')
    t.string = t.text.strip() + '_' + s
    x.replaceWithChildren()

<强>更新

    t = x.find('font')
    if not t:
        x.string += s
    else:
        t.string += s
    x.replaceWithChildren()