2016-04-30 13 views
-1

Hier ist meine ZeichenfolgeExtrahieren Sie eine bestimmte Anzahl aus einer Zeichenfolge mit Regex in Java

INPUT:

22 TIRES (2 defs) 

1 AP(PEAR + ANC)E (CAN anag) 

6 CHIC ("SHEIK" hom) 

ERWARTETES ERGEBNIS:

22 TIRES 

1 APPEARANCE 

6 CHIC 

ACTUAL OUTPUT:

TIRES 

APPEARANCE 

CHIC 

Ich habe versucht, unter Code und verwenden Habe die obige Ausgabe bekommen.

String firstnames =a.split(" \\(.*")[0].replace("(", "").replace(")", "").replace(" + ", 
         ""); 

Irgendeine Idee, wie man zusammen mit den Zahlen extrahiert? Ich möchte nicht die Zahlen hinter den Klammern wie in der Eingabe "22 REIFEN (2 Defs)". Ich brauche die Ausgabe als "22 REIFEN" Jede Hilfe wäre toll !!

+1

Warum wollen Sie das tun müssen? –

Antwort

0

Ich würde eine einzige replaceAll-Funktion verwenden.

str.replaceAll("\\s+\\(.*|\\s*\\+\\s*|[()]", ""); 

DEMO

  • \\s+\\(.*, entspricht dies einem Raum und die folgenden ( Zeichen plus alle verbleibenden Zeichen, die dieses Muster folgt. So wurde (CAN anag) Teil in Ihrem Beispiel gefunden.

  • \\s*\\+\\s* entspricht + zusammen mit den vorhergehenden und folgenden Leerzeichen.

  • [()] passt zu öffnenden oder schließenden Klammern.

  • Atlast alle übereinstimmenden Zeichen werden durch leere Zeichenfolge ersetzt.

+0

Es funktioniert !! Könnten Sie bitte erklären, wie es funktioniert? @Avinash Raj – Anusha

+0

Hallo @Anusha getan .. –

+0

Können Sie erklären, was genau der Code @Avinash Raj – Anusha

0

ich es tue etwas anders

String line = "22 TIRES (2 defs)\n\n1 AP(PEAR + ANC)E (CAN anag)\n\n6 CHIC (\"SHEIK\" hom)"; 
String pattern = "(\\d+\\s+)(.*)\\("; 
Pattern r = Pattern.compile(pattern); 
Matcher m = r.matcher(line); 
while (m.find()) { 
    String tmp = m.group(1) + m.group(2).replaceAll("[^\\w]", ""); 
    System.out.println(tmp); 
} 

Ideone Demo

Verwandte Themen