java - 替换字符串中正则表达式匹配的空白区域

标签 java regex string

我一直在努力解决这个问题。我有一个有模式的字符串。例如。

CW1234 has been despatched to CW334545 

即字符串可以有以 CW 开头的模式,后跟任意数量的整数(最多 16)。

我想用一个空字符替换所有这些模式。这样字符串看起来像

has been despatched to

我尝试了以下方法,但它只替换了 CW 后面的第一个数字。我对java很陌生。任何见解都会有很大帮助。

if(Pattern.matches(".*[C][W][0-9].*", str1)) {
    Matcher m = Pattern.compile(".*[C][W][0-9].*").matcher(str1);

    while(m.find()) {
        str1 = str1.replaceAll("[C][W][0-9]", "");
    }    
}

System.out.println(str1);

最佳答案

您需要在数字上使用 {n,m} 量词,以强制最大数字。此外,为了更换目的,您无需事先检查图案是否存在。 replaceAll 仅当存在匹配模式时才会替换,否则将保持原样。

因此,删除所有那些 PatternMatcher 部分,并将您的正则表达式更改为:

str1 = str1.replaceAll("CW\\d{0,16}", "");

如果您想要至少 1 位数字,则将其设为 {1,16}。无需将 CW 放在不同的字符类中。具有单个字符的字符类与该字符本身一样好(假设它不是特殊字符)。此外,您可以使用 \\d 而不是 [0-9]

关于java - 替换字符串中正则表达式匹配的空白区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18954476/

相关文章:

java - 出现语法错误,但奇怪的建议?

java - 这是为我的 servlet 添加 "global"参数的正确方法吗?

java - 以下错误是什么意思?

java - 将 Java 编译器添加到 Matlab?

python - 正则表达式在 Rubular 中传递,但在 Python 中不传递

regex - awk 跳过空行

regex - 如何将VI中的搜索选择复制到剪贴板并粘贴到同一文件中?

c - 是否有可能以某种方式使该程序崩溃?

json - flutter JSON解码未处理的异常: type 'Null' is not a subtype of type 'String'

java - 如何检查字符串是否仅包含 ASCII?