代码之家  ›  专栏  ›  技术社区  ›  Smashery

regex:匹配任何标点符号,除了。和

  •  25
  • Smashery  · 技术社区  · 14 年前

    是否有一种简单的方法来匹配除句点和下划线之外的所有标点符号?希望在不列举每个标点符号的情况下做到这一点。

    4 回复  |  直到 14 年前
        1
  •  30
  •   Les    14 年前

    使用regex减法

    [\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],然后添加一个减法字符类,比如-[.\uu],表示删除。和。减法放在标准类guts后面的[]中。

        2
  •  14
  •   Lucero    14 年前

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

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

    (说明:消极前瞻,以确保 . 也不 _ 匹配,然后匹配任何Unicode标点字符。)

        3
  •  9
  •   Ken Richards    14 年前

    这里有一些简单的东西。不是单词或空格(其中单词包括a-za-z0-9和下划线)。

    [^\w\s.]
    
        4
  •  1
  •   Abe Miessler    14 年前

    您可以使用这样的否定字符类:

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

    这包括每个角色 除了 那些上市。您可能需要排除更多字符(如控制字符),这取决于您的最终要求。