2016-09-07 25 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

相關問題