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

如何使用正则表达式仅匹配<>标签内的空白字符并替换为下划线

正则实现方案

实现思路

要精准达成需求,首先要划清处理边界:

  • 只处理被<和>包裹的标签片段范围内的空白
  • 标签外的正文文本(比如示例里 Moscow and Miami 这类内容)完全不参与匹配替换,从根源上避免误伤
  • 标签范围内的空白统一替换为下划线,示例里的闭标签本身没有内部空格,不会出现误改

具体规则写法

通用环视匹配版

适配大多数现代正则引擎(Python、Java、最新版JS、Go等),匹配正则为:
(?<=<[^<>]*)\s(?=[^<>]*>)

规则拆解:

  • (?<=<[^<>]*) :后置环视,确认当前匹配的空白,往前追溯最近的尖括号是<,说明空白在标签内部起始位置之后
  • \s :匹配单个空白,如果要把连续多个空白合并成一个下划线,可以把该段替换为\s+
  • (?=[^<>]*>) :前置环视,确认当前匹配的空白,往后追溯最近的尖括号是>,说明空白还没到标签的结束位置
    这个规则匹配到的所有空白,都严格处于标签内部,把匹配到的内容直接替换为_,就能得到目标效果:
    <ENAMEX_TYPE="GPE">Moscow and Miami</ENAMEX> are good, but <ENAMEX_TYPE="GPE">New York is better</ENAMEX>
    标签正文里的所有空格,因为往前找最近的尖括号是>,不符合后置环视的条件,完全不会被匹配改动。

高兼容捕获分组版

如果碰到不支持变长后置环视的老旧正则引擎,就用整标签捕获的写法,兼容性更好:

  • 用正则<[^>]+>把所有标签块整体匹配出来
  • 对每个匹配到的标签块,把块内部的空白全部替换为下划线
  • 和未改动的正文拼接得到最终结果
    Python环境下的实际运行代码示例:
import re
source_str = '<ENAMEX TYPE="GPE">Moscow and Miami</ENAMEX> are good, but <ENAMEX TYPE="GPE">New York is better</ENAMEX>'
# 匹配所有标签块,逐块处理内部空白
final_str = re.sub(
    r'<[^>]+>',
    lambda m: m.group().replace(' ', '_'),
    source_str
)
print(final_str)

运行输出结果和上面的环视版本完全一致。

适用说明

这个方案默认标签内部没有嵌套尖括号,和题目给出的示例场景完全匹配;如果标签内容本身包含尖括号结构,只需要调整标签块的匹配范围规则即可适配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.27 21:45:01