Skip to main content
 首页 » 编程设计

python之如何用它的 child 替换跨度并对 BeautifulSoup 中的内部文本进行正则表达式

2024年08月28日38birdshome

我有几个像

这样的标签
<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 中执行此操作?我可以做一个正则表达式并替换文本,但我丢失了字体。我需要保留 child ,并在同一个循环中用 regex 重新放置内部文本。谁能告诉我该怎么做?基本上我想要一个 each.replaceWithChildren,然后在同一个循环中更改 each.text ...,因为我不能丢失上下文。 5_5 是来自父 span 属性的数字。

在伪代码中我想要这样的东西:

span 是所有 span 标签的精美集合。

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

请您参考如下方法:

像这样:

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()