Remove non printable utf8 characters except controlchars from String

friesoft picture friesoft · Mar 20, 2013 · Viewed 10.8k times · Source

I've got a String containing text, control characters, digits, umlauts (german) and other utf8 characters.

I want to strip all utf8 characters which are not "part of the language". Special characters like (non complete list) ":/\ßä,;\n \t" should all be preserved.

Sadly stackoverflow removes all those characters so I have to append a picture (link).

Any ideas? Help is very appreciated!

PS: If anybody does know a pasting service which does not kill those special characters I would happily upload the strings.. I just wasn't able to find one..

[Edit]: I THINK the regex "\P{Cc}" are all characters I want to PRESERVE. Could this regex be inverted so all characters not matching this regex be returned?

Answer

stema picture stema · Mar 20, 2013

You have already found Unicode character properties.

You can invert the character property, by changing the case of the leading "p"

e.g.

\p{L} matches all letters

\P{L} matches all characters that does not have the property letter.

So if you think \P{Cc} is what you need, then \p{Cc} would match the opposite.

More details on regular-expressions.info

I am quite sure \p{Cc} is close to what you want, but be careful, it does include, e.g. the tab (0x09), the Linefeed (0x0A) and the Carriage return (0x0D).

But you can create you own character class, like this:

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

This class [^...] is a negated character class, so this would match everything that is not "Not control character" (double negation, so it matches control chars), and not tab, CR and LF.