在C#正则表达式中,是否有一种简单的方法可以匹配除句点和下划线之外的所有标点符号?希望这样做而不必枚举每一个标点符号.
Les*_*Les 31
使用正则表达式减法
[\p{P}-[._]]
Run Code Online (Sandbox Code Playgroud)
这是.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);
}
Run Code Online (Sandbox Code Playgroud)
说明模式是字符类减法.它以[\ p {P}]之类的标准字符类开始,然后添加一个减法字符类,如 - [._],表示删除.和_.减法放在标准类胆量之后的[]内.
Luc*_*ero 15
到目前为止,答案并不尊重所有标点符号.这应该工作:
(?![\._])\p{P}
Run Code Online (Sandbox Code Playgroud)
(说明:否定前瞻以确保既不匹配.
也不_
匹配,然后匹配任何unicode标点符号.)