2013-03-20 10 views
5

Ho una stringa contenente testo, caratteri di controllo, cifre, dieresi (tedesco) e altri caratteri utf8.Rimuovi caratteri utf8 non stampabili eccetto controlchars da String

Voglio rimuovere tutti i caratteri utf8 che non sono "parte della lingua". Caratteri speciali come (elenco non completo) ":/\ ßä,; \ n \ t" dovrebbero essere tutti conservati.

Purtroppo lo stackoverflow rimuove tutti quei caratteri, quindi devo aggiungere un'immagine (link).

Qualche idea? L'aiuto è molto apprezzato!

PS: Se qualcuno sa un servizio incollando che non uccide quei caratteri speciali sarei felice di caricare le corde .. Non ero in grado di trovare uno ..

[Edit]: Penso che la regex "\ P {Cc}" sono tutti i caratteri che voglio PRESERVARE. Questa regex potrebbe essere invertita in modo che vengano restituiti tutti i caratteri che non corrispondono a questa espressione regolare?

+0

Non sicuro, ma è possibile che la versione invertita di \ P {qualcosa} possa essere \ p {qualcosa}. Altrimenti puoi provare con [^ \ P {qualcosa}]. – Pshemo

+0

@Pshemo yeah indead in minuscolo sembra funzionare come è stato pubblicato qui sotto .. grazie! – friesoft

+0

Possibile duplicato di [Il modo più veloce per eliminare tutti i caratteri non stampabili da una stringa Java] (http://stackoverflow.com/questions/7161534/fastest-way-to-strip-all-non-printable-characters-from- a-java-string) – Stewart

risposta

8

avete già trovato proprietà dei caratteri Unicode.

È possibile invertire la proprietà carattere, cambiando il caso del leader "p"

esempio

\p{L} partite tutte le lettere

\P{L} partite tutti i personaggi che non hanno la lettera proprietà.

Quindi se pensi che lo \P{Cc} sia quello che ti serve, allora \p{Cc} corrisponderebbe al contrario.

Maggiori dettagli su regular-expressions.info

Sono abbastanza sicuro \p{Cc} è vicino a ciò che si vuole, ma attenzione, non comprende, ad esempio, la scheda (0x09), il Linefeed (0x0A) e il ritorno a capo (0x0D).

Ma è possibile creare voi propria classe di caratteri, come questo:

[^\P{Cc}\t\r\n] 

Questa classe [^...] è una classe di caratteri negata, quindi questo sarebbe partita tutto ciò che non è "non controlla carattere" (doppia negazione, così corrisponde ai caratteri di controllo) e non alla scheda, CR e LF.

+0

Molto bello! Grazie non lo sapevo .. suppongo di dover leggere più esercitazioni di espressioni regolari ... – friesoft

+0

oh ma aspetta .. questo rimuove anche le interruzioni di riga .. devono essere conservati .. – friesoft

+0

@friesoft L'espressione regolare di interruzione di riga è '\ r | \ n | \ r \ n', quindi '\ p {Cc} | \ r | \ n | \ r \ n' dovrebbe soddisfare le tue esigenze. – sp00m

0

È possibile utilizzare,

your_string.replaceAll("\\p{C}", ""); 
+2

no che rimuova troppo ma la risposta di @stema funziona già :) – friesoft

Problemi correlati