正则表达式匹配含指定邮箱行并匿名化指定字段的实现方案
CSV定向匿名化:仅处理含指定邮箱行的特定字段
核心正则表达式
(?m)(?=.*rod\.p@yes\.com)(?:\G(?!^),|^)(?:aaa|bbb|rod\.p@yes\.com)
替换目标为:anonymised
正则逻辑拆解
(?m):配合你已启用的multiline标志,让^/$匹配每行首尾(?=.*rod\.p@yes\.com):正向预查,确保当前行存在目标邮箱rod.p@yes.com,彻底避免匹配其他行的aaa/bbb(?:\G(?!^),|^):锁定CSV字段的起始边界——要么是行开头,要么是上一个匹配结束后的逗号,保证只匹配完整的独立字段,不会误匹配字段内的子串(?:aaa|bbb|rod\.p@yes\.com):精准匹配需要匿名化的目标内容(如果你的字段包含额外字符,可改为[^,\n]*(?:aaa|bbb|rod\.p@yes\.com)[^,\n]*适配复杂字段)
效果验证
针对你的示例数据:
原test2行:
test2,aaa,rod.p@yes.com,123456789,aaa,bbb,987654321,122,rod.p@yes.com,aaa,123456
替换后变为:
test2,anonymised,anonymised,123456789,anonymised,anonymised,987654321,122,anonymised,anonymised,123456
之前的正则问题说明
- 最初的
(aaa|bbb)?(rod\.p@yes\.com)?没有行级校验,会无差别匹配所有行的aaa/bbb - 后来的
^(aaa|bbb)?.*(rod\.p@yes\.com).*$会匹配整行,无法单独替换单个字段
内容的提问来源于stack exchange,提问作者Rodp
相关产品推荐
相关产品推荐

