2013-03-20 85 views
5

我有一個包含文本,控制字符,數字,元音變音(德語)和其他utf8字符的字符串。從字符串中刪除不可打印的utf8字符(控制字除外)

我想剝離所有不屬於「語言的一部分」的utf8字符。像(非完整列表)「:/ \ßä,; \ n \ t」等特殊字符應全部保留。

可悲的是,stackoverflow刪除所有這些字符,所以我必須添加一張圖片(link)。

任何想法?非常感謝幫助!

PS:如果有人不知道的黏貼服務不殺死那些特殊字符我會愉快地上傳琴絃..我只是沒能找到一個..

[編輯]:我認爲正則表達式「\ P {Cc}」是我想要保存的所有角色。這個正則表達式是否可以被倒置,以便所有不匹配這個正則表達式的字符都被返回?

+0

不知道,但它是可能的\ p {}東西倒立版本可以\ p {}的東西。如果沒有,您可以嘗試[^ \ P {something}]。 – Pshemo 2013-03-20 10:31:24

+0

@Pshemo耶indead小寫似乎工作,因爲已經發布在下面..謝謝! – friesoft 2013-03-20 10:32:27

+0

的可能的複製(http://stackoverflow.com/questions/7161534/fastest-way-to-strip-all-non-printable-characters-from- [最快的方式從一個Java字符串去除所有非打印字符] A-Java的字符串) – Stewart 2016-10-14 17:34:29

回答

8

你已經找到了Unicode字符屬性。

可以顛倒,字符屬性,通過改變領先的「P」

如的情況下,

\p{L}比賽的所有字母

\P{L}匹配不具有財產信中的所有字符。

所以,如果你認爲\P{Cc}是你所需要的,那麼\p{Cc}會匹配相反。

regular-expressions.info

更多細節我敢肯定\p{Cc}接近你想要什麼,但要小心,它包括,例如,選項卡(0x09),換行符(0x0A)和回車符(0x0D)。

但是你可以創建你自己的性格類,像這樣:

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

該類[^...]是一個否定的字符類,所以這會匹配一切,是不是「不控制字符」(雙重否定,所以它匹配控制字符),而不是選項卡,CR和LF。

+0

很不錯的!謝謝,我不知道..想我真的要讀更多的正則表達式教程... – friesoft 2013-03-20 10:31:12

+0

哦,但等待..這也消除換行..他們應該被保留.. – friesoft 2013-03-20 10:33:39

+0

@friesoft斷行正則表達式是'\ [R | \ n | \ r \ N',所以'\ p {抄送} | \ r | \ n | \ r \ N'應該滿足您的需求。 – sp00m 2013-03-20 10:37:35

0

可以使用,

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

沒有去除太多,但@stema的答案已經工程:) – friesoft 2013-03-20 10:31:44