在大模型数据处理中,使用正则表达式过滤个人信息数据是一种高效且灵活的方法。正则表达式通过定义特定模式来匹配敏感信息,以下从 原理、常见正则模式、实现流程及示例三方面详细说明:

一、正则表达式过滤个人信息的原理

  1. 核心逻辑
    正则表达式通过模式匹配识别文本中符合敏感信息特征的字符串,例如:

    • 邮箱地址的结构特征:用户名@域名
    • 电话号码的数字组合特征:中国手机号以1[3-9]\d{9}开头
    • 地址的地理标识特征:包含省/市/区+街道+门牌号等关键词
  2. 处理流程

    输入文本 → 正则表达式匹配敏感模式 → 替换/删除匹配内容 → 输出脱敏文本
    

二、常见个人信息的正则表达式模式

1. 邮箱地址
  • 通用模式\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b
    • 解释:匹配字母/数字/符号+@+域名+后缀的结构,例如user.name@example.com
  • 示例
    输入文本:联系我:john.doe@company.com
    正则匹配后替换为:联系我:[邮箱已脱敏]
2. 电话号码
  • 中国手机号1[3-9]\d{9}
    (匹配11位数字,以13/14/15/16/17/18/19开头)
  • 固定电话(含区号)0\d{2,3}-\d{7,8}
    (匹配区号-号码,如010-12345678
  • 示例
    输入文本:电话:13812345678 或 021-87654321
    替换后:电话:[手机号已脱敏] 或 [固话已脱敏]
3. 地址信息
  • 简化模式[\u4e00-\u9fa5]{2,}省?[\u4e00-\u9fa5]{2,}市?[\u4e00-\u9fa5]{2,}区?[0-9a-zA-Z\u4e00-\u9fa5]+街?道?路?[0-9]号?
    • 解释:通过中文地名关键词+数字编号匹配地址,例如北京市海淀区中关村大街1号
  • 示例
    输入文本:地址:广东省深圳市南山区科技园南路56号
    替换后:地址:[地址已脱敏]
4. 身份证号(18位)
  • 模式\d{6}(19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)
    • 解释:匹配6位地址码+8位出生日期+3位顺序码+1位校验码,例如110101199001011234
5. 银行卡号(简化)
  • 模式\d{16,19}
    • 解释:匹配16-19位数字(实际应用中需结合银行前缀优化)。

三、代码实现示例(Python)

以下是使用Python的re模块进行个人信息脱敏的示例:

import re

def mask_personal_info(text):
    # 定义正则表达式模式字典
    patterns = {
        # 邮箱
        'email': r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b',
        # 中国手机号
        'phone': r'1[3-9]\d{9}',
        # 固定电话
        'landline': r'0\d{2,3}-\d{7,8}',
        # 简化地址(匹配省市区+街道+号码)
        'address': r'[\u4e00-\u9fa5]{2,}省?[\u4e00-\u9fa5]{2,}市?[\u4e00-\u9fa5]{2,}区?[0-9a-zA-Z\u4e00-\u9fa5]+街?道?路?[0-9]号?',
        # 身份证号(简化)
        'id_card': r'\d{17}(\d|X)'
    }
    
    # 替换敏感信息
    for pattern_name, pattern in patterns.items():
        text = re.sub(pattern, f'[{pattern_name}已脱敏]', text)
    
    return text

# 测试示例
sample_text = """
用户信息:
姓名:张三
邮箱:zhangsan@example.com
电话:13912345678,固定电话:010-12345678
地址:北京市海淀区中关村南大街5号
身份证:110101199001011234
银行卡:6222021100012345678
"""

desensitized_text = mask_personal_info(sample_text)
print(desensitized_text)

输出结果

用户信息:
姓名:张三
邮箱:[email已脱敏]
电话:[phone已脱敏],固定电话:[landline已脱敏]
地址:[address已脱敏]
身份证:[id_card已脱敏]
银行卡:6222021100012345678

四、实际应用中的优化点

  1. 模式组合与优先级

    • 复杂场景下可使用|连接多个模式(如(邮箱模式)|(电话模式)),并按敏感程度排序(先匹配身份证,再匹配邮箱)。
  2. 上下文感知

    • 结合关键词过滤,例如仅在地址:电话:等前缀后匹配对应模式,减少误判。
  3. 性能优化

    • 对长文本分块处理,或使用re.compile()预编译正则表达式提升效率。
  4. 多语言支持

    • 处理英文地址时,调整模式为\b[A-Za-z0-9\s,.]+St|Ave|Rd+\b等(匹配StreetAvenue等后缀)。

五、注意事项

  • 误判与漏判:正则表达式无法100%准确识别所有敏感信息(如缩写地址中关村5号),需结合机器学习模型(如命名实体识别)提升精度。
  • 合规性:脱敏规则需符合《个人信息保护法》等法规,例如身份证号需保留前6位和后4位中间脱敏(110101******1234)。
  • 灵活配置:允许用户自定义正则模式,以适配特定场景下的敏感信息格式(如企业内部的工号、订单号)。

通过正则表达式与其他技术结合,可在大模型数据处理中高效实现个人信息的自动化过滤,平衡数据可用性与隐私保护需求。

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐