2016-05-13 14 views
2

Ich habe eine Regex-Ausdruck, der alle nicht alphanumerischen Zeichen entfernt. Es funktioniert gut für alle Sonderzeichen außer ^. Unten ist der Regex-Ausdruck, den ich verwende.Wie ein Zeichen in Regex Ausdruck in Java zu entkommen

String strRefernce = strReference.replaceAll("[^\\p{IsAlphabetic}^\\p{IsDigit}]", "").toUpperCase(); 

Ich habe versucht, es zu

String strRefernce = strReference.replaceAll("[^\\p{IsAlphabetic}^\\p{IsDigit}]\\^", "").toUpperCase(); 

und

String strRefernce = strReference.replaceAll("[^\\p{IsAlphabetic}^\\p{IsDigit}\\^]", "").toUpperCase(); 

Aber diese sind auch nicht in der Lage zu modifizieren dieses Symbol zu entfernen. Kann mir bitte jemand dabei helfen.

+0

Das gibt einen Kompilierungsfehler – Neel

+1

Es gibt ein '^' innen - entfernen Sie es. Verwenden Sie '" [^ \ \ IsAlphabetic} \\ p {IsDigit}] "' –

+0

Ich habe es bereits auf zwei Arten wie oben erwähnt versucht, ich kann es nicht an der richtigen Stelle setzen, aber das ist, was ich will kennt. – Neel

Antwort

1

Die erste ^ innerhalb [^...] ist eine Negationsmarke, die die Zeichenklasse zu einer negierten macht (übereinstimmende Zeichen außer dem, was drin ist).

Die zweite Innenseite wird als Literal betrachtet - daher sollte sie nicht mit der Regex übereinstimmen. Entfernen Sie es, und ein Caret wird damit erhalten abgestimmt:

"[^\\p{IsAlphabetic}\\p{IsDigit}]" 

oder noch kürzer:

"(?U)\\P{Alnum}" 

Die \P{Alnum} Klasse für eine beliebiges Zeichen steht außer ein alphanumerisches Zeichen: [\p{Alpha}\p{Digit}] (siehe Java regex reference) . Wenn Sie (?U) übergeben, entspricht die Klasse \P{Alnum} nicht Unicode-Buchstaben. Siehe this IDEONE demo.

Fügen Sie am Ende ein + hinzu, wenn Sie ganze Blöcke anderer Symbole als \\p{IsAlphabetic} und \\p{IsDigit} entfernen möchten.

enter image description here

+0

Danke. Werde es versuchen und aktualisieren. – Neel

+0

Der Screenshot stammt von der [OCPSoft-Website] (http://www.ocpsoft.org/tutorials/regular-expressions/java-visual-regex-tester/) –

+0

Vielen Dank. Es funktionierte. Durch das Hinzufügen des + -Symbols wird eine Gruppe von Sonderzeichen auf einmal entfernt, statt nacheinander zu gehen. Meinst Du das? – Neel

1

Das funktioniert auch.

System.out.println("Text 尖酸[刻薄 ^, More _0As text °ÑÑ"".replaceAll("(?U)[^[\\W_]]+", " ")); 

Ausgabe

Text 尖酸 刻薄 More 0As text Ñ Ñ 

nicht sicher, aber das Wort könnte die umfassendere Liste der ALPHANUM Zeichen lang sein.

[\\W_] ist eine Klasse, die Nicht-Wörter und einen Unterstrich enthält.

Wenn in eine negative Java-Klasse setzen konstruieren es

[^[\\W_]] wird eine negative Klasse einer Vereinigung zwischen nichts und
eine Klasse nicht-Wörter und einen Unterstrich enthält.