如何在Java中替换名为Capture Group的正则表达式的内容
我有一个java项目和以下带有命名捕获组的正则表达式模式:如何在Java中替换名为Capture Group的正则表达式的内容,java,regex,Java,Regex,我有一个java项目和以下带有命名捕获组的正则表达式模式: (?<department>\w+(-\w)??)\s{1,5}(?<number>\w+(-\w+)?)-(?<section>\w+)\s(?<term>\d+)\s(?<campus>\w{2}) (?\w+(\w)?)\s{1,5}(?\w+(\w+)-(?\w+)\s(?\d+)\s(?\w{2}) 我想用通配符(*)替换其中一个命名组的值。Matcher类中的所
(?<department>\w+(-\w)??)\s{1,5}(?<number>\w+(-\w+)?)-(?<section>\w+)\s(?<term>\d+)\s(?<campus>\w{2})
(?\w+(\w)?)\s{1,5}(?\w+(\w+)-(?\w+)\s(?\d+)\s(?\w{2})
我想用通配符(*)替换其中一个命名组的值。Matcher类中的所有replace方法似乎都与替换特定的正则表达式值有关。因为不能保证字符串是唯一的,所以我想用组名替换它
有没有办法利用Matcher类来提供这种替换功能?我意识到我可以使用Matcher的start和end方法来确定需要替换的字符范围。然后,我可以使用StringBuilder删除该范围并插入指定的替换值。我编写了以下方法来处理这种情况
public static String replaceNamedGroup(String source, Pattern pattern, String groupName, String replaceValue) {
if (source == null || pattern == null) {
return null;
}
Matcher m = pattern.matcher(source);
if (m.find()) {
int start = m.start(groupName);
int end = m.end(groupName);
StringBuilder sb = new StringBuilder(source);
sb = sb.delete(start, end);
if (replaceValue != null) {
sb = sb.insert(start, replaceValue);
}
return sb.toString();
} else {
return source;
}
}
下面是一些代码来说明如何使用它
String str = "ABC 123-123 1234 AB";
Pattern pattern = Pattern.compile("(?<department>\w+(-\w)??)\s{1,5}(?<number>\w+(-\w+)?)-(?<section>\w+)\s(?<term>\d+)\s(?<campus>\w{2})");
String output = replaceNamedGroup(str, pattern, "term", "*");
//outputs Output: ABC 123-123 * AB
System.out.println("Output: " + output);
String str=“ABC 123-123 1234 AB”;
Pattern Pattern=Pattern.compile((?\w+(\w)?)\s{1,5}(?\w+(\w+)-(?\w+)\s(?\d+)\s(?\w{2});
字符串输出=replaceNamedGroup(str,pattern,“term”,“*”);
//输出:ABC 123-123*AB
System.out.println(“输出:”+输出);
代码应该使用+而不是+,因此替换部分后面的文本不需要移动两次。使用三元运算符处理null
,如果需要:(replaceValue!=null?replaceValue:)