2017-06-03 4 views
0

ich einen regulären Ausdruck benötigen, die alles andere als das Muster passt \ d + - \ d +Regex Spiel alles andere als ein spezifisches Muster

Das ignoriert Muster werden eine Zahl über ein oder mehrere Ziffern gefolgt von einem Bindestrich dann gefolgt von einer weiteren Nummer mit einer oder mehreren Ziffern.

Zum Beispiel:

Test-123 Test-123-123-Test

nur "123-123"

nicht abgestimmt werden sollte

Kann mir jemand helfen, dies zu erreichen?

+0

können Sie '\\ d + (?! - \\ d +)' –

+0

wollen Sie Benutzer einschränken - zu schreiben? –

+0

's.split (" \\ d + - \\ d + ")' –

Antwort

1

Sie nicht angeben, wenn Sie zum Anpassen einzelner Strings einen Ausdruck wollen (Pattern#matches(String, CharSequence) oder String#matches(String)) oder wenn Sie wollen mehrere Übereinstimmungen in einer Zeichenfolge (Matcher#find()) zu finden.

einen einzelnen String Matching

Die folgende Verzweigung genommen wird, wenn input ist -Test oder , aber nicht, wenn es 123-123:

if (input.matches("(?s)(?!\\d+-\\d+).*")) { 
    // ... 
} 

Obwohl, wenn Sie Ihren Code macht die tatsächliche matches Anruf, könnten Sie auch schreiben:

if (!input.matches("\\d+-\\d+")) { 
    // ... 
} 

Suche nach Übereinstimmungen in einer Zeichenfolge

Wenn Sie mehrere Übereinstimmungen in einer Zeichenfolge finden möchten, hängt vieles davon ab, wie Sie in Token konvertieren möchten. Hier ist Beispielcode, der alle Leerzeichen getrennte Sequenzen aufgelistet, die nicht der Form sind \d+-\d+:

Pattern pattern = Pattern.compile("(?<=^|\\s)(?!\\d+-\\d+)\\S+(?=$|\\s)"); 
Matcher matcher = pattern.matcher(input); 
while (matcher.find()) { 
    System.out.println(matcher.group()); 
} 

für eine Eingabe von "Test 123-Test 123-123 Test", würde der Ausgang sein:

Test 
123 
Test 
Test 

Wenn Sie anders tokenisieren möchten, müssen Sie die Anpassung der Grenze anpassen. Die regulären Ausdrücke von Java haben einen Word-Boundary-Matcher (\b), aber 123-123 würde nicht als Wort betrachtet, da es einen Bindestrich enthält, der kein Regex-Wort ist.

+0

Ich musste dieses Muster in einer Zeichenfolge finden. Der zweite Teil Ihrer Antwort hat mein Problem gelöst. Vielen Dank! – chribrue

Verwandte Themen