gpt4 book ai didi

java - 将正则表达式模式替换为另一个模式中的组

转载 作者:行者123 更新时间:2023-11-30 01:52:57 25 4
gpt4 key购买 nike

我有一个像

这样的字符串
a#?.text1

我还有另外两个字符串,例如 c#1.text2d#2.text3

我想替换#?如果我选择 c#1.text2,则在 a#?.text1a#1.text1 中。如果我选择 d#2.text3,那么我想将 a#?.text1 替换为 a#2.text1。做到这一点最简单的方法是什么?我想出了一个使用组的解决方案,但我的团队认为这不是一种有效的方法。这是我的 Java 代码:

Pattern strPattern = Pattern.compile("(\\w+)(#\\?)(\\.\\w+)");
Pattern replacePattern = Pattern.compile("(\\w+)(#\\d+)(\\.\\w+)");

Matcher strMatcher = strPattern.matcher("a#?.text1");
Matcher replaceMatcher1 = replacePattern.matcher("c#1.text2");
Matcher replaceMatcher2 = replacePattern.matcher("d#2.text3");

if(strMatcher.matches() && replaceMatcher1.matches()) {
String number = replaceMatcher1.group(2);
return strMatcher.replaceAll(strMatcher.group(1) + number + strMatcher.group(3));
} else if(strMatcher.matches() && replaceMatcher2.matches()) {
String number = replaceMatcher2.group(2);
return strMatcher.replaceAll(strMatcher.group(1) + number + strMatcher.group(3));
}

我得到的反馈是小组效率低下,我必须找到一种更简单的方法来做到这一点。

有更好的方法吗?

最佳答案

看起来您只想从两个字符串中提取 # 后面的数字,即 c#1.text2d#2.text3 并替换 a#?.text1 字符串中 # 后面的 ?

您编写的代码似乎有点多,您创建了两个 Pattern,然后通过捕获三个组使用 Matcher 对象进行替换,其中因为这可以通过一些较短的代码轻松完成,而无需创建两个 Pattern 对象。

只需提取需要替换的数字,然后使用这些代码直接在 String 对象本身上使用 replaceFirst 方法将其替换为字符串,

Pattern replacePattern = Pattern.compile("\\w+#(\\d+)\\.\\w+");
Matcher m = replacePattern.matcher("c#1.text2"); // same way for d#2.text3
if (m.matches()) {
String digit = m.group(1); // the digit you wanted to extract
String retVal = "a#?.text1".replaceFirst("(?<=#)\\?", digit); // replace ? preceded by # with the digit using replaceFirst
System.out.println(retVal); // prints a#1.text1
return retVal;
} else {
System.out.println("String doesn't match the pattern");
}

总的来说,您的代码可以紧凑地写为,

Pattern replacePattern = Pattern.compile("\\w+#(\\d+)\\.\\w+");
Matcher m = replacePattern.matcher("c#1.text2"); // same way for d#2.text3
if (m.matches()) {
return "a#?.text1".replaceFirst("(?<=#)\\?", m.group(1)); // returns a#1.text1
}

关于java - 将正则表达式模式替换为另一个模式中的组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55444423/

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