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

Python正则表达式替换问题:为何<t>的起始<字符丢失?

re.sub处理字符串丢失起始<字符的原因

原始代码

import re
contents="""<tag>
</tag><t>text</t>"""

shorted= re.sub(r'(?s)<tag>.*?</tag>[^\w\s]*', '', contents).replace('\n', '')
print(shorted)
print()

执行结果与预期差异

  • 实际执行输出:
    t>text</t>
    
  • 预期输出:<t>text</t>(转义后为&lt;t&gt;text&lt;/t&gt;)
  • 问题:<t>的起始<字符丢失

原因分析

问题出在正则表达式的[^\w\s]*部分:

  • [^\w\s]表示匹配任意非字母数字、非空白的字符,*表示匹配0次或多次
  • 目标字符串中</tag>后面紧跟的是<t>的<,这个<属于非字母数字、非空白字符,因此被[^\w\s]*匹配到,和前面的<tag>...</tag>一起被替换为空字符串,最终导致<t>的起始<被删除。

修复思路

可以调整正则表达式避免误匹配<:

  • 方案1:将[^\w\s]*改为[^\w\s<]*,排除<的匹配:
    shorted= re.sub(r'(?s)<tag>.*?</tag>[^\w\s<]*', '', contents).replace('\n', '')
    
  • 方案2:如果仅需去除</tag>后的空白/换行,直接用\s*替代[^\w\s]*更精准:
    shorted= re.sub(r'(?s)<tag>.*?</tag>\s*', '', contents).replace('\n', '')
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 20:57:02