java 正则匹配人名

embedded/2024/10/31 17:16:19/

        有个需求,需要对json格式数据里面的人名(staffName)和电话(mobile进行脱敏。这种考虑用正则匹配。

处理:

正则表达式

   名字:包括英文字符,数字,空格(英文名称带空格): a-zA-Z0-9_\s
   中文: \u4e00-\u9fa5
   组合:([a-zA-Z0-9_\s\u4e00-\u9fa5]+)

  匹配: "staffName": "李盼盼" 

要注意处理 双引号

 String namePattern = "([a-zA-Z0-9_\\s\\u4e00-\\u9fa5]+)";// \s* 匹配可能出现的多个空格String pattern = "\""+key+"\""+":\\s*\""+namePattern+"\"";

先匹配:

java">   public static void main(String[] args) {String data = initData().trim();matchReplaceWithCondition("staffName", data);}public static String matchReplaceWithCondition( String  key,String content){String namePattern = "([a-zA-Z0-9_\\s\\u4e00-\\u9fa5]+)";// \s* 匹配可能出现的多个空格String pattern = "\""+key+"\""+":\\s*\""+namePattern+"\"";Pattern p = Pattern.compile(pattern);Matcher m = p.matcher(content);StringBuffer sb = new StringBuffer();while (m.find()) {String group = m.group();System.out.println(group);System.out.println(m.group(1));m.appendReplacement(sb, group == null ? "" : group);}m.appendTail(sb);return sb.toString();}public static String initData(){return "[{\"staffName\": \"李盼盼\",\"mobile\":\"18920220111,18955472232\"},{\"staffName\": \"Jenny Lang\",\"mobile\":\"18920220222,18920203333,18955472234\"},{\"staffName\": \"张三\",\"mobile\":\"18920221711\"}]";}

这样就匹配到名字了

脱敏

脱敏的话,就可以直接用replaceAll进行处理了。

java">    public static void main(String[] args) {String data = initData().trim();matchReplaceWithCondition("staffName", data);String staffName = desensitizeName("staffName", data);System.out.println(staffName);}// 名字,字符,数字,空格(英文名称带空格): a-zA-Z0-9_\s// 中文: \u4e00-\u9fa5// 组合 ([a-zA-Z0-9_\s\u4e00-\u9fa5]+)public static String desensitizeName(String key, String name) {return name.replaceAll( "\""+key+"\""+":\\s*\""+"(\\S)([a-zA-Z0-9_\\s\\u4e00-\\u9fa5]+)"+"\"", "\""+key+"\""+":\""+"$1**"+"\"");}

输出:

java">[{"staffName":"李**","mobile":"18920220111,18955472232"},{"staffName":"J**","mobile":"18920220222,18920203333,18955472234"},{"staffName":"张**","mobile":"18920221711"}]

缺陷:

        对于人名的脱敏,因为有两个名字,三个名字及其更多的,replaceAll的方式,只保留第一个字,总感觉还是不直观。如果要求不高,直接用replaceAll比较方便。

总结:

        正则匹配人名,主要是要了解中文的匹配。在json格式数据里面,要注意双引号的处理。

        关联文章《java 正则 匹配电话后脱敏


http://www.ppmy.cn/embedded/133914.html

相关文章

运维监控丨16条常用的Kafka看板监控配置与告警规则

本期我们针对企业运维监控的场景,介绍一些监控配置和告警规则。可以根据Kafka集群和业务的具体要求,灵活调整和扩展这些监控配置及告警规则。在实际应用场景中,需要综合运用多种监控工具(例如Prometheus、Grafana、Zabbix等&#…

matplotlilb画图

matplotlib matplotlib 是 Python 中一个强大而灵活的绘图库,广泛用于数据可视化。它允许创建多种类型的图表,包括线图、散点图、柱状图、饼图、直方图等。matplotlib 的基础是 pyplot 模块,它为绘图提供了简单的接口。这里详细讲解一下 mat…

traceroute或tracepath区别

traceroute和tracepath都是网络诊断工具,用于追踪数据包在网络中的路径,以帮助用户发现网络中可能存在的问题。以下是两者的具体区别: 一、实现方式 traceroute:通过调用原始数据包实现。由于直接处理原始数据包,某些…

智能财务 | 数据与融合,激发企业财务数智化转型思考

数据与融合,激发企业财务数智化转型思考 用友持续深耕企业财务领域,见证中国企业走过了财务电算化、信息化时代,当下共同经历数智化时代。2023 年度,通过走访标杆企业,与高校教授、权威机构学者共同探讨等形式&#xf…

20241028软考架构-------软考案例7答案

每日打卡题案例7答案 【2013年真题】 难度:一般 阅读以下有关表现层设计方面的说明,回答问题。 【说明】 某商业银行欲开发一套个人银行系统,为用户提供常见的金融服务,包括转账、查询、存款变更和个人信息管理等功能。该软件除了…

人工智能原理实验一:知识的表示与推理实验

一、实验目的 本实验课程是计算机、智能、物联网等专业学生的一门专业课程,通过实验,帮助学生更好地掌握人工智能相关概念、技术、原理、应用等;通过实验提高学生编写实验报告、总结实验结果的能力;使学生对智能程序、智能算法等有…

[Python学习日记-57] 常用模块的练习(答案更新中)

[Python学习日记-57] 常用模块的练习 简介 题目 答案 简介 本篇是常用模块的练习题,主要用于巩固前面学习的函数内容,建议先自己做一遍,最后再对答案,这样会比较稳固。 题目 1、导入模块的方式有哪几种,官方不推荐…

2024年网络安全进阶手册:黑客技术自学路线

🤟 基于入门网络安全/黑客打造的:👉黑客&网络安全入门&进阶学习资源包 前言 什么是网络安全 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队”、…