【问题标题】:Regex Expressions for all non alphanumeric symbols所有非字母数字符号的正则表达式
【发布时间】:2010-06-24 21:30:58
【问题描述】:

我正在尝试为其中至少包含 1 个非字母数字符号的字符串创建正则表达式

我尝试使用的代码是

Regex symbolPattern = new Regex("?[!@#$%^&*()_-+=[{]};:<>|./?.]");

我正在尝试仅匹配 !@#$%^&amp;*()_-+=[{]};:&lt;&gt;|./?. 之一,但它似乎不起作用。

【问题讨论】:

    标签: c# regex


    【解决方案1】:

    如果您想匹配非字母数字符号,则只需使用\W|_

    Regex pattern = new Regex(@"\W|_");
    

    这将匹配除 0-9 和 a-z 之外的任何内容。有关\W 字符类和其他可用的信息,请点击此处(c# Regex Cheet Sheet)。

    【讨论】:

    • 不是挑战宗师,不是说\W吗? \w(小写 w)匹配所有单词字符。
    • @Alan,没错,就是\W。不知何故错过了帽子。谢谢!
    • @just 某人:我回滚了你的转速。 @JaredPar 已进行了适当的修复。有时人们会打错字等。这是一个简单的错误。他修好了。我会让他怀疑他知道匹配所有单词字符和所有非单词字符之间的区别:D
    • @Alan,@just 某人,是的,这只是一个简单的错字。我只是在添加其他转义时错过了 SHIFT 键
    • 我认为一旦你达到 100k 代表,你就会成为神等等。 :)
    【解决方案2】:

    如果你愿意,你也可以避免使用正则表达式:

    return s.Any(c => !char.IsLetterOrDigit(c))
    

    【讨论】:

    • 呵呵.. 有时您只需要对所有内容都使用正则表达式 :) 即使我喜欢正则表达式,但通常最好避免使用它们。
    • @Alan - 我稍后会进行测试(除非其他人插话),但我相信这会更快一些。
    • 也可以尝试编译正则表达式。
    • ToCharArray 将复制字符串的字符,这是不必要的。为了获得更好的性能,只需查询字符串本身:return s.Any(c =&gt; !char.IsLetterOrDigit(c));
    【解决方案3】:

    你能检查一下相反的情况吗?

    Match match = Regex.Match(@"^([a-zA-Z0-9]+)$");
    if (!match.Success) {
        // it's alphanumeric
    } else {
        // it has one of those characters in it.
    }
    

    【讨论】:

      【解决方案4】:

      我没有得到你的全部问题,但是这个正则表达式将匹配那些至少包含一个非字母数字字符的字符串。这包括空格(但在您的列表中看不到)

      [^\w]+
      

      【讨论】:

        【解决方案5】:

        您的正则表达式只需要稍作调整。连字符用于形成A-Z 之类的范围,因此如果要匹配文字连字符,则必须使用反斜杠对其进行转义或将其移至列表末尾。您还需要转义方括号,因为它们是字符类的分隔符。然后一开始就去掉那个问号,你就开始做生意了。

        Regex symbolPattern = new Regex(@"[!@#$%^&*()_+=\[{\]};:<>|./?,-]");
        

        如果你只想匹配 ASCII 标点字符,这可能是最简单的方法。 \W 匹配除了标点符号之外的空白和控制字符,它匹配整个 Unicode 范围内的它们,而不仅仅是 ASCII。

        不过,您似乎缺少一些字符:反斜杠、撇号和引号。添加这些给你:

        @"[!@#$%^&*()_+=\[{\]};:<>|./?,\\'""-]"
        

        最后,对正则表达式始终使用 C# 的逐字字符串文字 (@"...") 是个好主意;它为您节省了很多使用反斜杠的麻烦。引号通过加倍进行转义。

        【讨论】:

          猜你喜欢
          • 2013-01-06
          • 1970-01-01
          • 2013-05-01
          • 2011-08-28
          • 1970-01-01
          • 2020-01-15
          • 2019-11-12
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多