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

如何在JSON字符串中正确应用已有的电子邮件掩码正则表达式?

解决JSON字符串中邮箱掩码正则失效的问题

问题原因

你原有的正则(?<=.{1})(?=[a-zA-Z0-9]).(?=.*@)是针对单独的邮箱字符串设计的,它通过反向断言匹配邮箱首字符后的位置,正向断言锁定@之前的字符范围。但直接用它扫描整个JSON字符串时,邮箱被包裹在字段名、引号等上下文里(比如"email": "test.ing%02@gmail.com"),原正则的断言逻辑会被这些额外的上下文干扰,无法正确定位到邮箱内部需要替换的字符,导致匹配失效。

解决方案

方案1:解析JSON后处理字段(推荐)

先把JSON字符串解析为结构化数据(比如字典),单独处理每个邮箱字段,再重新序列化为JSON。这种方法不受JSON结构复杂度影响,可靠性最高。

以Python为例:

import json
import re

# 定义邮箱掩码函数
def mask_single_email(email):
    return re.sub(r'(?<=.{1})(?=[a-zA-Z0-9]).(?=.*@)', '*', email)

# 原始JSON字符串
raw_json = '{"username": "testuser", "email": "test.ing%02@gmail.com", "backup_email": "abc123@outlook.com"}'

# 解析为字典
data = json.loads(raw_json)

# 遍历所有字段,处理含"email"的字段
for key, value in data.items():
    if 'email' in key.lower() and isinstance(value, str):
        data[key] = mask_single_email(value)

# 重新生成掩码后的JSON
masked_json = json.dumps(data)
print(masked_json)

输出结果:
{"username": "testuser", "email": "t***.***%**@gmail.com", "backup_email": "a****@outlook.com"}

方案2:正则匹配JSON中的邮箱字段(适合简单场景)

如果你的JSON结构简单(无嵌套对象、数组,无转义引号),可以用正则先匹配到所有邮箱字段的键值对,再对捕获的邮箱内容应用掩码。

以Python为例:

import re

def mask_email_callback(match_obj):
    # 捕获字段名和原始邮箱
    field_name = match_obj.group(1)
    raw_email = match_obj.group(2)
    # 应用掩码正则
    masked_email = re.sub(r'(?<=.{1})(?=[a-zA-Z0-9]).(?=.*@)', '*', raw_email)
    # 拼接回键值对格式
    return f'"{field_name}": "{masked_email}"'

raw_json = '{"username": "testuser", "email": "test.ing%02@gmail.com", "backup_email": "abc123@outlook.com"}'
masked_json = re.sub(r'"(\w*email\w*)": "([^"]+)"', mask_email_callback, raw_json)
print(masked_json)

注意:如果JSON存在嵌套结构、转义字符或者字段值包含双引号,这种方法会出错,优先用方案1。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 01:10:28