繁体   English   中英

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

[英]C# How to filtered datatable rows which containing alphanumeric with special characters using Regex

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

在此处输入图片说明

我想要过滤包含字母数字和特殊字符的数据:

HOAUD039# HOAUD00$

所以我在linq查询中尝试以下正则表达式:

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

这将同时返回字母数字结果和字母数字,其字符如下所示:

在此处输入图片说明

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

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

您可以根据将要使用的示例模式进行尝试

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

说明

  • ^ -字符串开始的锚点。
  • (?=.*\\d) -检查至少一位数字的条件必须匹配。
  • (?=.*[A-Za-z]) -检查至少一个字符的条件必须匹配。
  • (?=.*[!@#$&()\\\\- 。+,/ \\“])`-检查至少一项特殊条件必须匹配。
  • .* -匹配换行符以外的任何内容。
  • $ -字符串结尾。

演示版

在正则表达式中,您使用的是单个字符类,它将仅从多个字符类中选择一个,但是您有3个要求。

在第二个正则表达式中,由于*? ,所有内容都是可选的

您可以使用3个积极的前瞻性声明您的要求:

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

在C#中:

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

这将匹配:

  • ^字符串的开头
  • (?=.*\\d)一个数字
  • (?=.*[!@#$&() 。+,/-])`声明一个特殊字符
  • (?=.*[A-Za-z])设置小写或大写字符
  • [A-Za-z\\d!@#$&() 。+,/-] +`仅匹配允许字符的1+倍
  • $字符串结尾

正则表达式演示 | C#示范

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM