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

如何在正则指定捕获组内将__替换为@

解决方法

核心思路

匹配字符串中username=对应的取值部分,将其中的__替换为@,再把替换后的内容放回原字符串即可。

方案一:分步处理(捕获+替换+拼接)

先捕获username=后的取值,替换其中的__,再替换回原字符串。以Python为例:

import re

original_str = "a.*.AGG.all:some__string_here{location=*,username=fred.nurk__nurk.com,testId=12345}"
# 精准捕获username对应的取值(到下一个逗号或大括号为止)
match_result = re.search(r'(?<=username=)([^,}]+)', original_str)
if match_result:
    old_username = match_result.group(1)
    new_username = old_username.replace('__', '@')
    # 将修改后的取值替换回原字符串
    final_str = original_str.replace(old_username, new_username)
    print(final_str)

输出结果:

a.*.AGG.all:some__string_here{location=*,username=fred.nurk@nurk.com,testId=12345}

方案二:正则替换+回调函数(一步完成)

利用正则的替换回调功能,匹配到username=及其取值后,直接对取值部分做替换。适合大多数支持正则回调的编程语言:

Python实现

import re

original_str = "a.*.AGG.all:some__string_here{location=*,username=fred.nurk__nurk.com,testId=12345}"
final_str = re.sub(
    r'(username=)([^,}]+)',
    lambda match: match.group(1) + match.group(2).replace('__', '@'),
    original_str
)
print(final_str)

JavaScript实现

const originalStr = "a.*.AGG.all:some__string_here{location=*,username=fred.nurk__nurk.com,testId=12345}";
const finalStr = originalStr.replace(
    /(username=)([^,}]+)/g,
    (match, prefix, value) => prefix + value.replace('__', '@')
);
console.log(finalStr);

优化说明

  • 用[^,}]+替代原正则的[\w.]+,可以更精准匹配username的取值范围(到下一个逗号或大括号闭合为止),避免因取值包含非\w/.字符导致的匹配不完整问题。
  • 方案二无需单独捕获再拼接,逻辑更简洁,代码量更少。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 21:27:40