收集正则表达式过滤问题

时间:2012-04-27 11:23:29

标签: c# .net regex

我有这样的表达;

collection = collection.Where(x => Regex.IsMatch(x, "[a-zA-Z0-9+#-\\.\\s]+", RegexOptions.IgnoreCase)).ToList();

在过滤之前,集合中包含以下元素:

a+1, a#1, a-1, a.1, a 1, ab, a'1, a@1, a*1, a&1, a:1, a!1

之后,我只想留下以下要素:

a+1, a#1, a-1, a.1, a 1, ab

但没有任何元素被丢弃。

我只需要保留以下元素:字母,数字,加号,哈希,减号,点,空格。

如何更正此正则表达式?

1 个答案:

答案 0 :(得分:3)

您的正则表达式检查元素是否包含与文本匹配的子字符串。由于所有元素都包含a(与正则表达式匹配),因此保留所有元素。

如果您希望子字符串完全匹配,请将正则表达式括在^...$中(标记文本的开头和结尾):

... Regex.IsMatch(x, "^[a-zA-Z0-9+#-\\.\\s]+$", ...

编辑:此外,您需要将短划线-移至组的末尾:

... Regex.IsMatch(x, "^[a-zA-Z0-9+#\\.\\s-]+$", ...

否则,#-\\.会匹配#.的所有字符。