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

あなたは数字の配列が続く文字の配列の後に、すべてを置き換える意味ですか?ただ、そのために見て、唯一の試合で文字列を置換:

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

だから、基本的には、少なくとも1桁([0-9]+)スタートのシーケンスが続く少なくとも一つの大文字([A-Z]+)のシーケンスを探します入力の始めに(^)、その後に何か(.*)が続きます。シーケンスをグループに取り込み、文字列をそのグループだけに置き換えます(最初のキャプチャグループを参照する置換文字列の$1)。

+0

助けてくれてありがとう。数字の前にはIの文字が表示される場合と表示されない場合があります。 str.replaceAll( "^ [A-Z] * [0-9] +)。*"、 "$ 1")が行います。 – sian

関連する問題