2017-07-24 3 views
1

ich versuche 2 Dinge zu erfassen, in einem String „T3st12345“Regex + Java - wie erfassen Zahlen und alles andere Hinter

Ich möchte die hinteren Nummern („12345“) erfassen und auch den Namen der Test "T3st".

Das ist, was ich habe jetzt mit Java Matcher Bibliothek die nachlauf Zahlen übereinstimmen:

Pattern pattern = Pattern.compile("([0-9]*$)"); 
Matcher matcher = pattern.matcher("T3st12345"); 

aber es gibt „keine Übereinstimmung gefunden“.

Wie kann ich dies für die abschließenden Zahlen arbeiten und wie nehme ich den Namen des Tests auch?

+0

Sie müssen auf Matcher suchen oder entsprechen, bevor es Übereinstimmungen findet. https://docs.oracle.com/javase/7/docs/api/java/util/regex/Matcher.html – Tezra

Antwort

2

Sie diese Regex mit 2 erfasst Gruppen verwenden können:

^(.*?)(\d+)$ 

RegEx Demo

RegEx Breakup:

  • ^: Start
  • (.*?): Erfasst Gruppe # 1, der entspricht Null eines beliebigen Zeichens (la zy)
  • (\d+): Erfasst Gruppe # 1, die
  • $ vor Ende eine oder mehr Ziffern übereinstimmt: Ende
2

Sie können die folgende regex verwenden:

Pattern pattern = Pattern.compile("(\\p{Alnum}+?)([0-9]*)"); 
Matcher matcher = pattern.matcher("T3st12345"); 
if (matcher.matches()) { 
    System.out.println(matcher.group(1)); 
    System.out.println(matcher.group(2)); 
} 

Siehe Java demo

Das Muster (\\p{Alnum}+?)([0-9]*) wird in der Methode .matches() verwendet (um eine vollständige s tring match) und passt und erfasst in Gruppe 1 einen oder mehrere alphanumerische Zeichen, so wenig wie möglich (+? ist ein fauler Quantifizierer), und erfasst in Gruppe 2 keine oder mehrere Ziffern.

Beachten Sie, dass \\p{Alnum} durch eine expliziter [a-zA-Z0-9] ersetzt werden kann.

Verwandte Themen