正则表达式除了第一个

时间:2016-12-12 10:19:50

标签: java regex

嗨,我的字符串可能是这样的:

%a%%%%%bc%%%d%

我需要用“”替换字符串开头和结尾的第一个%和最后一个%。 此外,我需要为每个字符串序列组替换除第一个之外的所有%+。

结果应该是这样的:

a%bc%d

如何使用正则表达式?我尝试过这样的事情:.*?%(\W+)%但是它不起作用

感谢。

2 个答案:

答案 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");
}