2017-07-21 4 views
5

Ich brauche eine Regex, die folgende Zeichenfolge angegeben:Regex Ausdruck nur Worte ohne Zahlen oder Symbole zu erfassen

"test test3 t3st test: word%5 test! testing t[st" 

nur Worte in az Zeichen übereinstimmen:

Sollte entsprechen: Test Test

Sollte nicht übereinstimmen: test3 t3st test: wort% 5 test! t [st

Ich habe versucht ([A-Za-z])\w+ aber Wort% 5 sollte nicht übereinstimmen.

+1

Was sind die Worte, die Sie anpassen zu erwarten sind? – azro

+2

Warum soll "Wort% 5" übereinstimmen? – chomnoue

+0

Entschuldigung dafür, dass ich nicht klar bin, ich habe die Frage bearbeitet. – Digao

Antwort

3

können Sie verwenden

String patt = "(?<!\\S)\\p{Alpha}+(?!\\S)"; 

die regex demo See.

Es entspricht 1 oder mehr Buchstaben, die mit Leerraum oder Anfang/Ende der Zeichenfolgenpositionen eingeschlossen sind. Alternatives Muster ist entweder (?<!\S)[a-zA-Z]+(?!\S) (wie oben) oder (?<!\S)\p{L}+(?!\S) (wenn Sie auch alle Unicode-Buchstaben abgleichen möchten).

Einzelheiten:

  • (?<!\\S) - ein negatives Lookbehind, die das Spiel schlägt fehl, wenn ein Nicht-Leerzeichen Zeichen links von der aktuellen Position sofort sind
  • \\p{Alpha}+-1 oder mehrere ASCII-Buchstaben (einen negativen Look-Ahead, die das Spiel schlägt fehl, wenn -
  • (?!\\S) gleiche wie [a-zA-Z]+, aber wenn Sie einen Pattern.UNICODE_CHARACTER_CLASS Modifikator-Flag verwenden, wird \p{Alpha} kann Unicode Buchstaben) entsprechen Es gibt ein Nicht-Whitespace-Zeichen unmittelbar rechts vom aktuellen Ort.

Siehe ein Java demo:

String s = "test test3 t3st test: word%5 test! testing t[st"; 
Pattern pattern = Pattern.compile("(?<!\\S)\\p{Alpha}+(?!\\S)"); 
Matcher matcher = pattern.matcher(s); 
while (matcher.find()){ 
    System.out.println(matcher.group(0)); 
} 

Ausgang: test und testing.

+0

Dank Wiktor, und was bist du der Regex, um das Gegenteil davon zu entsprechen? Ich meine, der Rest der Saite passt nicht zusammen? – Digao

+1

@Digao: Sorry, was wäre dann die Ausgabe? 2 Elemente: '[" test3 t3st test: Wort% 5 test! "," T [st] "]' oder 6 Elemente '[" test3 "," t3st "," test: "," wort% 5 "," test! "," t [st "]'? –

+1

Ich vermute, dass Sie [diese] (http://ideone.com/mIvAox) die "entgegengesetzten" Ergebnisse erhalten möchten. –

1

diese

Pattern tokenPattern = Pattern.compile("[\\p{L}]+"); 

[\\p{L}]+ diese druckt Versuchen Gruppe von Buchstaben

Verwandte Themen