猿问

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

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


我想要的是过滤那些具有特殊字符的字母数字数据,例如:


HOAUD039# HOAUD00$


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


var matches =

    dt.AsEnumerable()

    .Where(row => Regex.IsMatch(row["Empolyee_CRC"].ToString(),

                                "^[a-zA-Z0-9!@#$&()\\-`.+,/\"]*$"))

    .CopyToDataTable();

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


http://img4.mukewang.com/62a5568400018bd701250108.jpg

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


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


qq_遁去的一_1
浏览 421回答 2
2回答

倚天杖

您可以根据将提供的示例模式尝试此操作^(?=.*\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+ 次$字符串的结尾
随时随地看视频慕课网APP
我要回答