我在创建从字符串示例获取的匹配正则表达式时遇到问题: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;
}
}
答案 0 :(得分:0)
尝试此正则表达式(\d.*?\+)
here demo
在Java中:
String string = "Notification_Group_4+E3";
System.out.print(string.replaceAll("\\d.*?\\+", ""));
输出:
Notification_Group_E3
答案 1 :(得分:0)
常规:
def result = "Notification_Group_4+E3".replaceFirst(/_\d\+(.*)/, '_$1')
println result
输出:
~> groovy solution.groovy
Notification_Group_E3
~>
正则表达式的可视化如下:
正则表达式说明:
/.../
定义正则表达式。这使转义变得更简单_
上进行匹配\d
groovy slashy strings匹配一位数字(0-9)。 +
字符。我们必须用反斜杠\
对此进行转义,因为+
而不在正则表达式中转义表示“一个或多个”(请参阅javadocs中的as described in the javadoc for the java Pattern class)。我们不需要一个或多个,我们只需要一个+
字符。 (.*)
创建一个greedy quantifiers中所述的正则表达式捕获组。这样做是为了避免被锁定在以E3
结尾的输入字符串中。这样,输入字符串可以以任意字符串结尾,并且模式仍将起作用。这实际上表示“捕获组并在任意次数(正则表达式中的.
中包含任何字符(即正则表达式中的*
)”表示翻译为“只捕获其余的字符线,无论它是什么。” _$1
,即仅在下划线之后加上捕获组捕获的所有内容。 $1
是对“第一个捕获组”的“反向引用”,例如在Java logical operators part of the java Pattern regex中记录的。 答案 2 :(得分:0)
简单的一线:
String res = 'Notification_Group_4+E3'.replaceAll( /_\d+\+/, '_' )
assert 'Notification_Group_E3' == res