gpt4 book ai didi

Java/Groovy - 字符串 : replace characters on matched regex

转载 作者:行者123 更新时间:2023-12-02 04:49:38 33 4
gpt4 key购买 nike

我在创建从字符串示例中获取的匹配正则表达式时遇到问题:NotificationGroup_n+En,其中 n 是 1-4 中的数字,当假设我匹配范围内的所需数字时,我将用该特定数字替换或删除它.

进程之前的字符串:NotificationGroup_4+E3

处理后的字符串:NotificationGroup_E3

我删除了 n(1-4 中的数字)并留下 _E 与数字

我的问题是如何在 string.replace 函数中编写正则表达式来匹配数字和加号,并仅省略带 _En 的字符串

def String string = "Notification_Group_4+E3";
println(removeChar(string));
}
public static def removeChar(String string) {
if ((string.contains("1+"))||(string.contains("2+")||(string.contains("3+"))||(string.contains("4+")))) {
def stringReplaced = string.replace('4+', "");
return stringReplaced;
}
}

最佳答案

在常规中:

def result = "Notification_Group_4+E3".replaceFirst(/_\d\+(.*)/, '_$1')
println result

输出:

~>  groovy solution.groovy
Notification_Group_E3

~>

Try it online!

正则表达式的可视化如下所示:

regex visualization

正则表达式解释:

  1. 我们使用groovy slashy strings /.../ 定义正则表达式。这使得逃脱变得更简单
  2. 我们首先匹配下划线_
  3. 然后我们使用预定义的字符类 \d as described in the javadoc for the java Pattern class 匹配单个数字 (0-9) 。
  4. 然后我们匹配一个 + 字符。我们必须使用反斜杠 \ 来转义,因为在正则表达式中不转义的 + 表示“一个或多个”(请参阅​​ javadocs 中的 greedy quantifiers)。我们不需要一个或多个,我们只需要一个 + 字符。
  5. 然后,我们创建一个正则表达式捕获组,如 logical operators part of the java Pattern regex 中所述。使用括号表达式(.*)。我们这样做是为了避免被锁定在以 E3 结尾的输入字符串中。这样,输入字符串可以以任意字符串结尾,并且该模式仍然有效。这本质上是说“捕获一个组并包含任何字符(即正则表达式中的 .)任意次数(即正则表达式中的 *)”,翻译为“只需捕获该行的其余部分,无论它是什么”。
  6. 最后我们替换为 _$1,即只需下划线后跟捕获组捕获的内容。 $1 是对“第一个捕获组”的“反向引用”,例如 java Matcher javadocs 中记录的那样。 。

关于Java/Groovy - 字符串 : replace characters on matched regex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56455123/

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