2010-10-19 118 views

回答

29

使用正則表達式減法

[\p{P}-[._]] 

這裏的(我不確定其他版本是否支持它)... http://msdn.microsoft.com/en-us/library/ms994330.aspx

這裏的一個C#示例

string pattern = @"[\p{P}\p{S}-[._]]"; // added \p{S} to get ^,~ and ` (among others) 
string test = @"_""'a:;%^&*~`[email protected]#.,?"; 
MatchCollection mx = Regex.Matches(test, pattern); 
foreach (Match m in mx) 
{ 
    Console.WriteLine("{0}: {1} {2}", m.Value, m.Index, m.Length); 
} 

說明的圖案是一個字符類減法。它以像[\ p {P}]這樣的標準字符類開始,然後添加一個減去字符類,如 - [._],它表示刪除該類。和_。減法放在標準類膽量之後的[]內。

+0

這似乎不匹配^,〜或';我可以測試它錯誤,還是.NET不認爲它們是標點符號? – Smashery 2010-10-20 00:50:10

+0

如果刪除 - [._],那麼\ p {P}也不匹配它們。 – Les 2010-10-20 00:57:51

+0

因此.NET不認爲它們是標點符號? – Smashery 2010-10-20 00:58:38

1

你可能用一個否定的字符類是這樣的:

[^0-9A-Za-z._\s] 

這包括每一個字符除了所列。您可能需要排除更多字符(如控制字符),具體取決於您的最終要求。

+0

這也會得到空格 – 2010-10-19 23:29:51

+0

好的,給排除列表添加空間。 – 2010-10-19 23:39:07

+4

好吧,但我想要你的代表的一半這個問題...... – 2010-10-19 23:41:42

8

這裏有點簡單。不是單詞或空格(其中單詞包括A-Za-z0-9和下劃線)。

[^\w\s.] 
+0

也適用於Ruby! – zanbri 2012-01-18 15:08:29

12

到目前爲止的答案並不尊重所有標點符號。這應該工作:

(?![\._])\p{P} 

(說明:排除模式,以確保既不.也不_匹配,然後匹配任何Unicode標點字符。)

+0

這似乎不匹配^,〜或';我可以測試它錯誤,還是.NET不認爲它們是標點符號? – Smashery 2010-10-20 00:50:43

+0

@Smashery這些是口音,你永遠不會把這些用作英語標點符號。 – steinar 2010-10-20 01:00:25

+0

非常感謝!我決定接受Les的回答,因爲我發現正則表達式減法概念上更容易理解;因此我更有可能記住它;但+1 - 謝謝你教我一些新的東西!(希望我可以接受兩個答案) – Smashery 2010-10-20 01:04:37

相關問題