2017-03-21 1 views
-2

String str = "XYhaku (ABH1235-123548)";"Minuszeichen" in diesen regulären Ausdruck, wie?

von oben Zeichenfolge, ich brauche nur „ABH1235-123548“ und bisher habe ich regex

Pattern.compile("ABH\\d+") 

aber es gibt mir false.so, was die richtige regex für sie.

+0

Try 'Pattern.compile ("ABH [\\ d -] +")'. Beachten Sie, dass "\ d" nicht "-' –

+0

thx enthält, es funktioniert jetzt :) –

Antwort

1

\d entspricht nur Ziffern. Um andere Zeichen zu enthalten, verwenden Sie einen character class:

Pattern.compile("ABH[\\d-]+") 

Beachten Sie, dass die - muss zuerst oder zuletzt in der Zeichenklasse gestellt werden, denn sonst wird er als Bereichsanzeige behandelt werden ([A-Z] jeden Buchstaben zwischen A passend und Z , beispielsweise). Eine weitere Möglichkeit zu vermeiden, dass es zu entkommen wäre, aber das fügt noch zwei Schrägstriche an der Zeichenfolge ...

+0

Ich glaube, Sie können immer noch die Bereichsindikator innerhalb einer Zeichenklasse jederzeit entkommen (' \\ - '). – Rogue

+0

Das stimmt. Es ist eine persönliche Vorliebe von mir, einer Regex nicht mehr Backslashes hinzuzufügen, wenn es vermieden werden kann, besonders in Java, aber das ist keine absolute Voraussetzung. –

+0

Wird dies nicht mehr als ein '-' Symbol bekommen? 'ABH \ d + - \ d +' wäre genug, oder? –

1

Ich würde nur greifen, was auch immer in der Klammer ist:

Pattern p = Pattern.compile("\\((?<data>[A-Z\\d]+\\-\\d+)\\)"); 

Oder, wenn Sie möchten, noch mehr offen (jede Klammer):

Pattern p = Pattern.compile("\\((?<data>.+\\)\\)"); 

Dann ist es nur nab:

String s = /* some input */; 
Matcher m = p.matcher(s); 
if (m.find()) { //just find first 
    String tag = m.group("data"); //ABH1235-123548 
} 
Verwandte Themen