代码之家  ›  专栏  ›  技术社区  ›  Ahmer Ali Ahsan

C#如何使用正则表达式过滤包含字母数字和特殊字符的数据表行

  •  0
  • Ahmer Ali Ahsan  · 技术社区  · 7 年前

    我的C#数据表中有以下数据

    enter image description here

    我想要的是过滤那些包含字母数字和特殊字符的数据,如:

    HOAUD039# HOAUD00$

    因此,我在linq查询中尝试使用以下正则表达式:

    var matches =
        dt.AsEnumerable()
        .Where(row => Regex.IsMatch(row["Empolyee_CRC"].ToString(),
                                    "^[a-zA-Z0-9!@#$&()\\-`.+,/\"]*$"))
        .CopyToDataTable();
    

    它返回字母数字结果和字母数字结果,字符如下:

    enter image description here

    现在,我的问题很简单,很清楚什么是只显示带有特殊字符的字母数字结果的正确方法。

    我也试过这个正则表达式,但它也不起作用 ^(?:[\d,\/().]*[a-zA-Z][a-zA-Z\d,\/().]*)?$

    2 回复  |  直到 7 年前
        1
  •  1
  •   The fourth bird    7 年前

    在您的正则表达式中,您使用的是一个CharacterActer类,它只能从多个类中选择一个,但您有3个要求。

    * ?

    您可以使用3个正面外观标题来声明您的需求:

    ^(?=.*\d)(?=.*[!@#$&()`.+,\/\-])(?=.*[A-Z])[A-Z\d!@#$&()`.+,\/\-]+$
    

    string pattern = @"^(?=.*\d)(?=.*[!@#$&()`.+,\/\-])(?=.*[a-zA-Z])[a-zA-Z\d!@#$&()`.+,\/-]+$";
    

    这将符合:

    • ^ 字符串开头
    • (?=.*\d) 断言数字
    • (?=.*[!@#$&() .+,/-])`断言一个特殊字符
    • (?=.*[A-Za-z])
    • [A-Za-z\d!@#$&() .+,/-]+`只匹配允许字符的1+倍
    • $ 结束

    Regex demo | C# Demo

        2
  •  1
  •   Code Maniac    7 年前

    您可以根据您的示例模式来尝试这一点

    ^(?=.*\d)(?=.*[A-Za-z])(?=.*[!@#$&()\\-`.+,\/\"]).*$
    

    解释

    • ^ -锚定到字符串的开头。
    • (?=.*\d)
    • (?=.*[A-Za-z]) -检查匹配项中至少一个字符的条件必须存在。
    • (?=.*[!@#$&()\\- .+,/\“])`-用于检查匹配项中至少有一个特殊项的条件。
    • .* -匹配除newline以外的任何内容。
    • $

    Demo