正则表达式:匹配任何标点字符除外.和_

Sma*_*ery 27 .net c# regex

在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}]之类的标准字符类开始,然后添加一个减法字符类,如 - [._],表示删除.和_.减法放在标准类胆量之后的[]内.

  • 我很惊讶严重的口音不被认为是标点符号.我想你需要用标点符号来定义你的意思.您可以添加"符号"字符类(\ p {S})来拾取重音,克拉和波浪号.我会编辑我的例子. (2认同)

Luc*_*ero 15

到目前为止,答案并不尊重所有标点符号.这应该工作:

(?![\._])\p{P}
Run Code Online (Sandbox Code Playgroud)

(说明:否定前瞻以确保既不匹配.也不_匹配,然后匹配任何unicode标点符号.)


Ken*_*rds 9

这有点简单.不是单词或空格(其中单词包括A-Za-z0-9和下划线).

[^\w\s.]
Run Code Online (Sandbox Code Playgroud)