我的 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,\/().]*)?$
2 回答
倚天杖
TA贡献1828条经验 获得超3个赞
您可以根据将提供的示例模式尝试此操作
^(?=.*\d)(?=.*[A-Za-z])(?=.*[!@#$&()\\-`.+,\/\"]).*$
解释
^
- 锚定到字符串的开头。(?=.*\d)
- 检查至少一位数字的条件必须匹配。(?=.*[A-Za-z])
- 检查至少一个字符的条件必须存在匹配。(?=.*[!@#$&()\\-
.+,/\"])` - 检查至少一个特殊的条件必须存在于匹配中。.*
- 匹配除换行符以外的任何内容。$
- 字符串结束。
慕仙森
TA贡献1827条经验 获得超7个赞
在您的正则表达式中,您使用的是单个字符类,它只会从众多中选择一个,但您有 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+ 次$
字符串的结尾
- 2 回答
- 0 关注
- 420 浏览
添加回答
举报
0/150
提交
取消