在C#正则表达式中,是否有一种简单的方法可以匹配除句点和下划线之外的所有标点符号?希望这样做而不必枚举每一个标点符号。
答案 0 :(得分:30)
使用正则表达式减法
[\p{P}-[._]]
这是.NET Regex文档的链接(我不确定其他版本是否支持它)... 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:;%^&*~`bc!@#.,?";
MatchCollection mx = Regex.Matches(test, pattern);
foreach (Match m in mx)
{
Console.WriteLine("{0}: {1} {2}", m.Value, m.Index, m.Length);
}
解释模式是字符类减法。它以[\ p {P}]之类的标准字符类开始,然后添加一个减法字符类,如 - [._],表示删除。和_。减法放在标准类胆量之后的[]内。
答案 1 :(得分:15)
到目前为止,答案并不尊重所有标点符号。这应该有效:
(?![\._])\p{P}
(解释:确定.
和_
都不匹配的否定前瞻,然后匹配任何unicode标点符号。)
答案 2 :(得分:9)
这有点简单。不是单词或空格(其中单词包括A-Za-z0-9 AND下划线)。
[^\w\s.]
答案 3 :(得分:1)
您可以使用这样的否定字符类:
[^0-9A-Za-z._\s]
这包括除之外的所有字符。您可能需要排除更多字符(例如控制字符),具体取决于您的最终要求。