在特定顺序后删除所有字符

时间:2016-09-07 12:19:52

标签: java regex

我想在第一个数字序列结束后删除所有字符。

编辑:(抱歉含糊不清)

  1. 字符串可能以字母开头,也可能不以字母开头,但如果它开始 这些字母应该保留下来。
  2. 在第一个数字序列之后,应删除所有内容。

    e.g。 QWEE1232RTY - > QWE1232

    123RTY - > 123

    12342 - > 12342

    str.replaceAll("[^A-Z][^0-9]+","");
    
  3. 这应该有效,但它会产生意外的输出而不会打印重复的“2”。

    My ideone code for the attempt and it's respective outputs

        import java.util.*;
        import java.lang.*;
        import java.io.*;    
        class Ideone
        {
            public static void main (String[] args) throws java.lang.Exception
            {
                String str = "BCTC27452ASDFCCC";
                System.out.println(str.replaceAll("[^A-Z0-9]",""));
                   // BCTC27452ASDFCCC
                System.out.println(str.replaceAll("[^A-Z0-9]$",""));
                   // BCTC27452ASDFCCC
                System.out.println(str.replaceAll("[^A-Z][^0-9]",""));
                   // BCTC2745SDFCCC
                System.out.println(str.replaceAll("[^A-Z][^0-9]+",""));     
                // Closest Output - "BCTC2745" (why 2nd "2" not printed)
                System.out.println(str.replaceAll("[^A-Z][^0-9]*",""));
                   // BCTC
                System.out.println(str.replaceAll("[^A-Z][^0-9+]",""));
                   // BCTC2745SDFCCC
                System.out.println(str.replaceAll("[^A-Z][^0-9*]","")); 
                   // BCTC2745SDFCCC    
    
                System.out.println("Expected Output: BTC27452");
    
            }
        }
    

1 个答案:

答案 0 :(得分:5)

你的意思是在一系列字母后跟一系列数字后替换所有内容?只需查找并仅使用匹配替换字符串:

str.replaceAll("^([A-Z]+[0-9]+).*","$1")

所以基本上你要查找一个至少有一个大写字符([A-Z]+)的序列,后跟一个从输入开头开始的至少一个数字([0-9]+)的序列({{ 1}})后面跟着任何东西(^)。您将序列捕获到一个组中,并仅将该字符串替换为该组(在替换字符串中引用第一个捕获组的.*)。