我必须将文件名替换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。这不是必需的。那么我如何验证数字括号就在点 ie 之前。
2 回答
暮色呼如
TA贡献1853条经验 获得超9个赞
您可以使用
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+ 位数字(?=\)\.)
- 紧接着是).
字符序列。
如果您需要告诉正则表达式匹配字符串中最后一个点(最有可能是扩展分隔符)的点,请替换(?=\)\.)
为(?=\)\.[^.]*$)
. 请参阅此正则表达式演示。
添加回答
举报
0/150
提交
取消