嗨,我的字符串可能是这样的:
%a%%%%%bc%%%d%
我需要用“”替换字符串开头和结尾的第一个%和最后一个%。 此外,我需要为每个字符串序列组替换除第一个之外的所有%+。
结果应该是这样的:
a%bc%d
如何使用正则表达式?我尝试过这样的事情:.*?%(\W+)%
但是它不起作用
感谢。
答案 0 :(得分:7)
您可以使用
.replaceAll("^%|%$|(%)+", "$1")
请参阅regex demo
<强>详情:
^%
- 字符串开头的%
匹配|
- 或%$
- 字符串结尾处的%
|
- 或(%)+
- 一个匹配1 + %
个符号的重复捕获组,但每次迭代时只捕获一个%
到第1组,之后,$1
反向引用该群组会使用1 %
替换多个%
个字符。答案 1 :(得分:0)
Wiktor的解决方案很不错。但是,如果您需要知道输入是否与模式匹配,您可能希望尝试这样的解决方案:
Pattern p = Pattern.compile("%([^%]+%)%*([^%]*%)%*([^%]+)%");
Matcher m = p.matcher(input);
if(m.matches()) {
System.out.println(m.group(1) + m.group(2) + m.group(3));
} else {
System.err.println("The pattern didn't match");
}