我想用重复的规则写一个正则表达式。
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
。