gpt4 book ai didi

java - 如何替换命名组的值

转载 作者:行者123 更新时间:2023-12-01 11:57:21 24 4
gpt4 key购买 nike

我有正则表达式

private static final String COPY_NUMBER_REGEX = ".*copy(?<copy_num>\\d+)";

我需要按如下方式替换命名组:

private void setCopyNum(){
Pattern pa = Pattern.compile(COPY_NUMBER_REGEX);
Matcher ma = pa.matcher(template.getName());
if(ma.find()){
Integer numToReplace = Integer.valueOf(ma.group("copy_num")) + 1;
//How to replace the value of the original captured group with numToReplace?
}
}

问题其实就在评论里。 Java Regex 中是否有某些东西允许我们替换命名组值?当然,我的意思是获取一个带有替换值的新字符串。例如:

input: Happy birthday template - copy(1)
output: Happy birthday template - copy(2)

最佳答案

这是一个快速但肮脏的解决方案:

//                                 | preceded by "copy"
// | | named group "copynum":
// | | | any 1+ digit
final String COPY_NUMBER_REGEX = "(?<=copy)(?<copynum>\\d+)";
// using String instead of your custom Template object
String template = "blah copy41";
Pattern pa = Pattern.compile(COPY_NUMBER_REGEX);
Matcher ma = pa.matcher(template);
StringBuffer sb = new StringBuffer();
// iterating match
while (ma.find()) {
Integer numToReplace = Integer.valueOf(ma.group("copynum")) + 1;
ma.appendReplacement(sb, String.valueOf(numToReplace));
}
ma.appendTail(sb);
System.out.println(sb.toString());

输出

blah copy42

注释

  • copy_num是无效的命名组 - 不允许使用下划线
  • 该示例是独立的(可以在 main 方法中工作)。您需要稍微适应您的环境。
  • 如果您需要实际匹配这些,您可能需要在命名组周围添加转义括号:"(?<=copy\\()(?<copynum>\\d+)(?=\\))"

关于java - 如何替换命名组的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28341175/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com