2017-10-20 2 views
1

Ich habe eine Java-App, wo ich eine Regex haben muss, die alle außer Zeichen und Zahl ersetzen (einschließlich der spanischen Zeichen wie betonte Vokale und ñ/Ñ) Es muss auch einige spezifische enthalten räumliche Zeichen.Regex, um alle spanischen Zeichen und Nummer

Ich habe die folgende Regex, aber es ist auch die betonten Vokale zu entfernen, die nicht die Idee ist

string.replaceAll("[^-_/.,a-zA-Z0-9 ]+","") 

Ich will nur diese Zeichen akzeptieren .. nicht andere wie æ, å oder andere ..

+0

Möchten Sie nur bestimmte Zeichenmarken zulassen? Wie nur ñ/Ñ, oder alle Akzente, einschließlich äöüèéâ und dergleichen? – Felk

+0

Ja, nur das ... Ich will nicht andere Zeichen wie portugues, französisch, etc .. – Faabass

+0

Sie "nichts akzeptieren" oder "bekommen" mit 'replaceAll (" ... "," ") 'Sie" entfernen "die Zeichen. Was müssen Sie entfernen? Geben Sie ein Beispiel an. Was ist die erwartete Ausgabe für '" łąka123! @ # $%^& *() _ + "'? –

Antwort

1

können Sie \p{L} anstelle von a-zA-Z:

string = string.replaceAll("[^-_/.,\\p{L}0-9 ]+",""); 

Die \p{L} Matches alle Unicode-Zeichen, unabhängig von Modifikatoren auf die regex Kompilieren übergeben.

Siehe ein Java test:

List<String> strs = Arrays.asList("[email protected]#Łąka$%^", "Word123-)(=+"); 
for (String str : strs) 
    System.out.println("\"" + str.replaceAll("[^-_/.,\\p{L}0-9 ]+","") + "\""); 

Ausgang:

"Łąka" 
"Word123-" 

Muster Details: das [^-_/.,\\p{L}0-9 ]+ Muster paßt zu jedem Char andere als -, _, _, /, ., ,, Unicode Buchstabe, ASCII-Ziffer und ein Leerzeichen.

Beachten Sie, dass Sie mit dieser Lösung weiterhin Unicode-Ziffern wie ٠١٢٣٤٥٦٧٨٩ entfernen.

können Sie Mena's suggested verwenden \p{Alnum}aber mit (?U) embedded flag option Spiel alle Unicode-Buchstaben und Ziffern reall:

string = string.replaceAll("(?U)[^-_/.,\\p{Alnum} ]+",""); 

Um nur Unicode Buchstaben andere als gemeinsame europäische Buchstaben zu entfernen, nur À-ÿ addieren und subtrahieren zwei nicht-Buchstaben , ×÷, aus diesem Bereich:

string = string.replaceAll("(?U)[^-_/.,A-Za-zÀ-ÿ &&[^×÷]]+",""); 
+0

Ja, aber ich will nicht die Charaktere Łą oder andere ... Ich werde die Frage aktualisieren, um es klarer zu machen, danke! – Faabass

+0

@Faabass * Ich habe das folgende RegEx erstellt, aber es entfernt auch die gestressten Vokale, was nicht die Idee ist * - meine Regex entfernt nicht 'ł',' ± 'usw. –

+0

@Faabass Siehe Musterdetails. –

0

Sie können die Alnum Skript verwenden, um alle Buchstaben und Ziffern zu ersetzen, akzentuierte Zeichen einschließlich:

"[^-_/.,\\p{Alnum} ]+" 

docs anzeigen :

\ p {} Alnum einem alphanumerischen Zeichen: [\ p {Alpha} \ p {Digit}]

Beachten Sie, dass Ihre Ersatz zur Zeit wirkt sich auf alle alphabetischen Zeichen usw.

wenn Sie möchten, um tatsächlich die benutzerdefinierte Klasse zunichte machen (und ersetzt damit alles, was da drin nicht definiert ist), zu verwenden:

"[^[-_/.,\\p{Alnum} ]]+" 

(beachten Sie die zusätzlichen eckigen Klammern nach der ^, sonst würde es als wörtliche ^ interpretiert werden).

bearbeiten

Sie furtherly auf eine Teilmenge der lateinischen Zeichenblöcke verengen kann mit:

String s = "a1᣹"; 
System.out.println(
    s.replaceAll("[^[-_/.,\\p{InBASIC_LATIN}\\p{InLATIN_1_SUPPLEMENT}0-9]]+","") 
); 

Ausgabe

Łą 

Beachten Sie, dass Sie noch einige haben Nicht-spanische Zeichen in der Ergänzung zu Latein 1, siehe here.

Wenn Sie Ihre Anforderungen weiter einschränken möchten, müssen Sie wahrscheinlich Ihre eigene (längliche) Zeichenklasse mit bestimmten spanischen Zeichen definieren.

+0

Ja, aber ich will nicht die Charaktere Łą oder andere ... Ich werde die Frage aktualisieren, um es klarer zu machen, danke! – Faabass

+0

@Faabass sehe meine Bearbeitung, könnte es eingrenzen. – Mena

Verwandte Themen