2016-09-07 26 views
-1

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

编辑:(对不起,不确定性)

  1. 字符串可能会或可能不会与字母开头,但如果它开始 字母应予以保留。
  2. 第一个数字序列后,应删除所有内容。

    例如QWEE1232RTY - > QWE1232

    123RTY - > 123

    12342 - > 12342

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

这应该工作,但它给人意想不到的输出,而不是打印重复 “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"); 

     } 
    } 
+0

为什么不提取['^ [AZ] {4} [0-9] {5}'](https://regex101.com/r/aE5cN9/2) – Tushar

+0

你的问题是为什么'2'是去掉?你能澄清规则吗? –

+0

@Tushar字母数量不固定。 – sian

回答

5

你的意思是,随后的数字序列的字母序列后,换成新的?只要看看该和替换,只有匹配的字符串:后面至少一个数字([0-9]+)出发的序列

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

所以基本上你看至少一个大写字符([A-Z]+)的序列在输入的开始处(^),然后是任何东西(.*)。您将序列捕获到一个组中,并仅将该字符串替换为该组(替换字符串中引用第一个捕获组的$1)。

+0

感谢您的帮助。我在数字可能会或可能不会出现之前写信。 str.replaceAll(“^ [A-Z] * [0-9] +)。*”,“$ 1”)会这样做。 – sian

相关问题