我想用重复的规则写一个正则表达式。

String resList = "WW200020+ww200020";
if(resList!=null && (resList.matches("^([a-zA-Z]{2}[0-9%_]*)"))){
    resList =resList.substring(2);
}


+是分隔符,可以是可选的。例如,它也可以像WW200020。我需要在+符号后重复该规则。如何为重复的规则编写正则表达式?

请帮忙。

最佳答案

您可以使用1个replaceAll和一个更新的正则表达式获得预期的输出(请注意方括号中的[+],这样我们就不必转义它了,而?量词使它成为可选,也请注意最后一个搜索整个子模式1次或更多次的+量词:

String resList = "WW200020+ww200020";
if(resList!=null && resList.matches("^([+]?[a-zA-Z]{2}[0-9%_]*)+")) {
   resList =  resList.replaceAll("(?i)(?<=^|[+])[a-z]{2}([0-9%_]*)", "$1");
   System.out.println(resList);
}


IDEONE demo

正则表达式-(?i)(?<=^|[+])[a-z]{2}([0-9%_]*)-匹配以下内容:


(?i)-强制不区分大小写的匹配([a-z]也将匹配[A-Z]
(?<=^|[+])-查找后面的字符串,确保在字符串之前(^)或加号...
[a-z]{2}-2个英文字母
([0-9%_]*)-捕获到组1中的0个或更多数字(0-9)或%_,我们在替换模式中将其称为$1

10-07 23:02