You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python将<strong><em><u>标签统一替换为<strong>?需两种实现方案

实现方案

方案1:不使用正则(基于HTML解析器实现)

该方案通过解析HTML的DOM结构处理标签,完全避免字符串误匹配问题,不管标签嵌套层数、嵌套顺序多复杂都能准确处理,是最严谨的实现方式,还能自动兼容目标标签带属性的场景。

from html.parser import HTMLParser

class StrongReplaceParser(HTMLParser):
    def __init__(self):
        super().__init__()
        self.result = []
        self.target_tags = {'strong', 'em', 'u'}
    
    def handle_starttag(self, tag, attrs):
        if tag in self.target_tags:
            self.result.append('<strong>')
        else:
            attr_str = ' '.join(f'{k}="{v}"' for k, v in attrs)
            self.result.append(f'<{tag} {attr_str}>' if attr_str else f'<{tag}>')
    
    def handle_endtag(self, tag):
        if tag in self.target_tags:
            self.result.append('</strong>')
        else:
            self.result.append(f'</{tag}>')
    
    def handle_data(self, data):
        self.result.append(data)

def function_cover_all_strong(html):
    parser = StrongReplaceParser()
    parser.feed(html)
    return ''.join(parser.result)

# 测试用例
html = '''
<h1>Make bakery</h1>
<p>Step 1: Please use good quality product for make <strong><em>bakery</em></strong></p>
<p>Step 2: Make <em><u>bakery</u></em> hot</p>
<p>Step 2: Make <em><strong><u>bakery</u></strong></em> hot</p>
'''
print(function_cover_all_strong(html))

如果你的输入是已经转义为&lt;/&gt;的内容,可以先把实体转回原始字符再处理,或者直接修改解析逻辑适配转义格式。

方案2:使用正则实现

该方案代码更简洁,适合确定输入HTML中没有非标签场景的<xxx>格式内容的情况,仅需两行正则替换就能覆盖所有嵌套场景,无需枚举任何排列组合。

import re

def function_cover_all_strong(html):
    # 替换所有目标开标签为<strong>,兼容标签带空格、带属性的场景
    html = re.sub(r'<\s*(strong|em|u)\s*[^>]*>', '<strong>', html)
    # 替换所有目标闭标签为</strong>
    html = re.sub(r'<\s*/\s*(strong|em|u)\s*>', '</strong>', html)
    return html

# 测试用例同上
html = '''
<h1>Make bakery</h1>
<p>Step 1: Please use good quality product for make <strong><em>bakery</em></strong></p>
<p>Step 2: Make <em><u>bakery</u></em> hot</p>
<p>Step 2: Make <em><strong><u>bakery</u></strong></em> hot</p>
'''
print(function_cover_all_strong(html))

如果需要处理转义后的实体内容,把正则里的<替换为&lt;、>替换为&gt;即可:

html = re.sub(r'&lt;\s*(strong|em|u)\s*[^&]*&gt;', '&lt;strong&gt;', html)
html = re.sub(r'&lt;\s*/\s*(strong|em|u)\s*&gt;', '&lt;/strong&gt;', html)

内容的提问来源于stack exchange,提问作者nguyenphanhoaiduc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 16:54:04