我有这样的表达;
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
但没有任何元素被丢弃。
我只需要保留以下元素:字母,数字,加号,哈希,减号,点,空格。
如何更正此正则表达式?
答案 0 :(得分:3)
您的正则表达式检查元素是否包含与文本匹配的子字符串。由于所有元素都包含a
(与正则表达式匹配),因此保留所有元素。
如果您希望子字符串完全匹配,请将正则表达式括在^...$
中(标记文本的开头和结尾):
... Regex.IsMatch(x, "^[a-zA-Z0-9+#-\\.\\s]+$", ...
编辑:此外,您需要将短划线-
移至组的末尾:
... Regex.IsMatch(x, "^[a-zA-Z0-9+#\\.\\s-]+$", ...
否则,#-\\.
会匹配#
到.
的所有字符。