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

如何使用re.sub保留匹配的颜色值实现HTML标签替换?

正则替换实现HTML颜色标签转Span标签

问题场景

原始字符串:

my_string = "This is an<br>example <color=#ABCDEF>string</color>."

期望转换后的结果:

expected_result = "This is an<br>example <span style=\"color:#ABCDEF;\">string</span>."

错误原因分析

你之前的正则写法出错,核心问题是:

  1. 用......匹配颜色值,但没有通过捕获组留存原始颜色内容
  2. 替换字符串里的......是普通文本,无法关联匹配到的真实颜色值

正确实现方法

用正则捕获组提取颜色值,再在替换时引用该捕获内容,配合replace()处理闭合标签:

import re

my_string = "This is an<br>example <color=#ABCDEF>string</color>."

# 先替换闭合标签,简单直接
processed = my_string.replace("</color>", "</span>")

# 正则捕获颜色值并替换开启标签
# 正则说明:
# - <color=# 匹配固定前缀
# - ([0-9A-Fa-f]{6}) 捕获6位十六进制颜色值(支持大小写)
# - > 匹配标签结尾
result = re.sub(r"<color=#([0-9A-Fa-f]{6})>", r'<span style="color:#\1;">', processed)

print(result)
# 输出:This is an<br>example <span style="color:#ABCDEF;">string</span>.

扩展支持

如果需要兼容3位短颜色码(比如#FFF),可以修改正则的捕获组规则:

result = re.sub(r"<color=#([0-9A-Fa-f]{3,6})>", r'<span style="color:#\1;">', processed)

该方案支持字符串中多次出现<color>标签的场景,例如:

multi_color_str = "Green <color=#00FF00>text</color> and purple <color=#800080>text</color>."
processed_multi = multi_color_str.replace("</color>", "</span>")
result_multi = re.sub(r"<color=#([0-9A-Fa-f]{6})>", r'<span style="color:#\1;">', processed_multi)
# 结果:Green <span style="color:#00FF00;">text</span> and purple <span style="color:#800080;">text</span>.

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 11:27:13