Java/Groovy - 字符串:替换匹配的正则表达式上的字符

我在创建将从字符串示例获取的匹配正则表达式时遇到问题: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;

    }

}


HUX布斯
浏览 561回答 3
3回答

哔哔one

在常规中:def result = "Notification_Group_4+E3".replaceFirst(/_\d\+(.*)/, '_$1')println result输出:~>  groovy solution.groovyNotification_Group_E3~> 在线试用!正则表达式的可视化如下所示:正则解释:我们使用groovy 斜杠字符串 /.../来定义正则表达式。这使转义更简单我们首先匹配下划线_然后我们使用预定义字符类匹配单个数字 (0-9) \d ,如 java Pattern 类的 javadoc 中所述。然后我们匹配一个+字符。我们必须用反斜杠转义它,\因为+在正则表达式中不转义意味着“一个或多个”(请参阅 javadocs 中的贪婪量词)。我们不想要一个或多个,我们只想要一个+角色。然后,我们使用 parens 表达式创建一个正则表达式捕获组,如java 模式正则表达式的逻辑运算符部分中所述(.*)。我们这样做是为了不被锁定在以 结尾的输入字符串中E3。这样,输入字符串可以以任意字符串结尾,并且该模式仍然有效。这实质上是说“捕获一个组并包含任何字符(即.in regex)任意次数(即*in regex)”,这意味着“只捕获该行的其余部分,无论它是什么”。最后我们替换为_$1,即只是下划线后跟捕获组捕获的任何内容。这$1是对“第一个捕获组”的“反向引用”,如 java Matcher javadocs中所述。

三国纷争

在这里试试这个正则表达式(\d.*?\+) 演示在爪哇中:String string = "Notification_Group_4+E3"; System.out.print(string.replaceAll("\\d.*?\\+", ""));输出 :Notification_Group_E3

Helenr

简单的单线:String res = 'Notification_Group_4+E3'.replaceAll( /_\d+\+/, '_' )assert 'Notification_Group_E3' == res
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java