2016-09-07 4 views
-1

Ich wollte alle Zeichen nach dem Ende der ersten Zahlenfolge entfernen.Entfernen Sie alle Zeichen nach einer bestimmten Sequenz

Edit: (Sorry für Mehrdeutigkeit)

  1. Die Zeichenfolge kann oder nicht mit Buchstaben beginnen, aber falls es beginnt die Buchstaben erhalten werden sollte.
  2. Nach der ersten Folge von Zahlen sollte alles entfernt werden.

    z.B. QWEE1232RTY -> QWE1232

    123RTY -> 123

    12342 -> 12342

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

Dies sollte funktionieren, aber es ist unerwartete Ausgabe geben und nicht den Druck der wiederholt "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

Warum nicht einfach extrahieren ['^ [AZ] {4} [0-9] {5}'] (https://regex101.com/r/aE5cN9/2) – Tushar

+0

Ist Ihre Frage, warum '2' ist entfernt? Könnten Sie die Regeln klären? –

+0

@Tushar Die Anzahl der Buchstaben ist nicht festgelegt. – sian

Antwort

5

Sie meinen, alles nach einer Folge von Buchstaben durch eine Folge von Ziffern, dann ersetzen? Suchen Sie einfach nach, dass und ersetzen Sie die Zeichenfolge mit dem Spiel nur:

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

Also im Grunde suchen Sie eine Sequenz von mindestens einem Großbuchstaben ([A-Z]+), gefolgt von einer Folge von mindestens einer Ziffer ([0-9]+) ab am Anfang der Eingabe (^) und gefolgt von irgendetwas (.*). Sie erfassen die Sequenz in einer Gruppe und ersetzen die Zeichenfolge nur durch diese Gruppe ($1 in der Ersetzungszeichenfolge, die sich auf die erste Erfassungsgruppe bezieht).

+0

Danke für die Hilfe. Ich Buchstaben vor Ziffern kann oder nicht vorhanden sein. str.replaceAll ("^ [A-Z] * [0-9] +). *", "$ 1") würde genügen. – sian

Verwandte Themen