如何在 java 字符串中的 () 之间获取值?



我必须abc(1).jpg替换文件名才能abc(2).jpg。这是代码

String example = "my attachements with some name (56).jpg";
Matcher m = Pattern.compile("\((\d{1,}).\)").matcher(example);
int a = 0;
while(m.find()) {
a=Integer.parseInt(m.group(1));
String p = example.replace(String.valueOf(a), String.valueOf(a+1));
}

它正在按照给定的用例工作。但是在这种情况下失败abc(ab)(1)(ab).jpg在这种情况下,它只是更改为abc(ab)(2)(ab).jpg.这不是必需的.那么我如何验证数字括号是否在点之前,即.

您可以使用

String example = "my attachements with some name (56).jpg";
Matcher m = Pattern.compile("(?<=\()\d+(?=\)\.)").matcher(example);
example = m.replaceAll(r -> String.valueOf(Integer.parseInt(m.group())+1) );
System.out.println( example );
// => my attachements with some name (57).jpg

请参阅Java演示。使用的正则表达式是

(?<=()d+(?=).)

请参阅正则表达式演示。它匹配

  • (?<=()- 紧跟在前面(的位置
  • d+- 然后消耗 1+ 位数字
  • (?=).)- 紧随其后的是).字符序列。

如果您需要告诉正则表达式匹配字符串中最后一个点的点(其中很可能是扩展分隔符(,请将(?=).)替换为(?=).[^.]*$)。请参阅此正则表达式演示。

您可以使用前瞻正则表达式:

"\((\d+)\)(?=\.)"

(?=.)是一个前瞻条件,在关闭后立即断言存在点)

正则表达式演示

最新更新