我必须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+)\)(?=\.)"
(?=.)
是一个前瞻条件,在关闭后立即断言存在点)
正则表达式演示