string testStr = "你好,測試。"; Regex reg = new Regex(@"\p{P}"); testStr = reg.Replace(testStr, ""); //testStr=你好測試
Unicode 編碼並不只是為某個字符簡單定義了一個編碼,而且還將其進行了歸類。
\pP 其中的小寫 p 是 property 的意思,表示 Unicode 屬性,用於 Unicode 正表達式的前綴。
大寫 P 表示 Unicode 字符集七個字符屬性之一:標點字符。
其他六個是
L:字母;
M:標記符號(一般不會單獨出現);
Z:分隔符(比如空格、換行等);
S:符號(比如數學符號、貨幣符號等);
N:數字(比如阿拉伯數字、羅馬數字等);
C:其他字符
上面這七個是屬性,七個屬性下還有若干個子屬性,用於更進一步地進行細分。
Java 中用於 Unicode 的正則表達式數據都是由 Unicode 組織提供的。
Unicode 正則表達式標准(可以找到所有的子屬性)
http://www.unicode.org/reports/tr18/
各 Unicode 字符屬性的定義,可以用一看看某個字符具有什么屬性。
http://www.unicode.org/Public/UNIDATA/UnicodeData.txt
這個文本文檔一行是一個字符,第一列是 Unicode 編碼,第二列是字符名,第三列是 Unicode 屬性,
以及其他一些字符信息。
類別 |
說明 |
---|---|
Lu |
字母,大寫 |
Ll |
字母,小寫 |
Lt |
字母,首字母大寫 |
Lm |
字母,修飾符 |
Lo |
字母,其他 |
L |
所有字母字符。 這包括 Lu、Ll、Lt、Lm 和 Lo 字符。 |
Mn |
標記,非間距 |
Mc |
標記,間距組合 |
Me |
標記,封閉 |
M |
所有音調符號標記。 這包括 Mn、Mc 和 Me 類別。 |
Nd |
數字,十進制數 |
Nl |
數字,字母 |
No |
數字,其他 |
N |
所有數字。 這包括 Nd、Nl 和 No 類別。 |
Pc |
標點,連接符 |
Pd |
標點,短划線 |
Ps |
標點,開始 |
Pe |
標點,結束 |
Pi |
標點,前引號(根據具體使用情況,作用可能像 Ps 或 Pe) |
Pf |
標點,后引號(根據具體使用情況,作用可能像 Ps 或 Pe) |
Po |
標點,其他 |
P |
所有標點字符。 這包括 Pc、Pd、Ps, Pe、Pi、Pf 和 Po 類別。 |
Sm |
符號,數學 |
Sc |
符號,貨幣 |
Sk |
符號,修飾符 |
So |
符號,其他 |
S |
所有符號。 這包括 Sm、Sc、Sk 和 So 類別。 |
Zs |
分隔符,空白 |
Zl |
分隔符,行 |
Zp |
分隔符,段落 |
Z |
所有分隔符字符。 這包括 Zs、Zl 和 Zp 類別。 |
Cc |
其他,控制 |
Cf |
其他,格式 |
Cs |
其他,代理項 |
Co |
其他,私用 |
Cn |
其他,未賦值(任何字符都不具有此屬性) |
C |
所有控制字符。 這包括 Cc、Cf、Cs、Co 和 Cn 類別。 |