gpt4 book ai didi

java - Java 中的自定义正则表达式替换

转载 作者:搜寻专家 更新时间:2023-11-01 01:26:11 25 4
gpt4 key购买 nike

我想在字符串中找到与正则表达式匹配的所有模式:no="(\d+)"然后用其他东西替换组中的数字。

在下面的方法中,我可以找到并替换整个匹配项,但这不是我想要的。有没有办法只替换该匹配项中的一部分?

private String replaceStringFromPatternSearch(String stringToSearch, String patternString, String replacementString) {
String replacedString = null;
Pattern stringPattern = Pattern.compile(patternString);

Matcher stringMatcher = stringPattern.matcher(stringToSearch);
replacedString = stringMatcher.replaceAll(replacementString);
if (replacedString != null) {
return replacedString;
} else {
return stringToSearch;
}
}

最佳答案

Java 中没有回调/Lambda 替换,但我们有其他选择

选项 1:在替换函数中使用捕获缓冲区

replaceAll 中,您可以从当时要插入的组件(例如捕获的文本和字符串)构建替换。这是一个例子:

String replaced = yourString.replaceAll("no=\"(\\d+)\"", 
"Something $1 Something else");

在替换中,$1 是捕获的数字。您不必使用它们,但正如您所见,您可以围绕它们构建一个替换字符串。

选项 2(替换 Lambda/回调/委托(delegate)等效项):一次构建一个匹配项

在 Java 中,要构建更复杂的替换,我们没有替换 lambda,但我们可以这样做:

StringBuffer resultString = new StringBuffer();
Pattern regex = Pattern.compile("no=\"(\\d+)\"");
Matcher regexMatcher = regex.matcher(subjectString);
while (regexMatcher.find()) {
// You can vary the replacement text for each match on-the-fly
// String computed_replacement = .... Something wild!
regexMatcher.appendReplacement(resultString, computed_replacement );
}
regexMatcher.appendTail(resultString);

关于java - Java 中的自定义正则表达式替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25052628/

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