项目中需要这样二种场景,需要贪婪匹配一个字符串,按照相应的匹配规则,替换指定的字符。
一、场景一匹配规则
1.中括号开头紧接2位数字
2.中间部分任意
3.右中括号结尾
代码如下:
String str = "[05经销商风险等级:低风险][06客户户籍地风险等级:中高风险][06销售风险等级:中风险][01不符合增信退回要求][02人行与申请提供手机号码不一致]";//正则Pattern pattern=pile("\\[\\d{2}.*?\\]");Matcher matcher = pattern.matcher(str);StringBuffer stringBuffer = new StringBuffer(512);while (matcher.find()) {StringBuilder sb = new StringBuilder(matcher.group(0));System.out.println(matcher.group());if (StringUtils.isBlank(sb) || sb.length() <= 2) {continue;}//替换第2,3位为空sb.replace(1, 3, "");System.out.println(sb.toString());}输出结果:[05经销商风险等级:低风险][经销商风险等级:低风险][06客户户籍地风险等级:中高风险][客户户籍地风险等级:中高风险][06销售风险等级:中风险][销售风险等级:中风险][01不符合增信退回要求][不符合增信退回要求][02人行与申请提供手机号码不一致][人行与申请提供手机号码不一致]
二、场景二匹配规则
1.匹配()中的内容
代码如下:
//正则Pattern pattern = pile("(?<=\\()(.+?)(?=\\))");matcher = pattern.matcher("06客户户籍地风险等级(低风险)师12(中高风险)(人行与申请提供手机号码不一致)风险(中风险)01不符合增信退回要求(不符合增信退回要求)01不符合增信退回要求");while(matcher.find())System.out.println(matcher.group());输出结果:低风险中高风险人行与申请提供手机号码不一致中风险不符合增信退回要求