2

我有这样的表达;

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

但没有元素被丢弃。

我只需要保留包含以下内容的元素:字母、数字、加号、哈希、减号、点、空格。

如何纠正这个正则表达式?

4

1 回答 1

3

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

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

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

编辑:此外,您需要将破折号移动-到组的末尾:

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

否则,#-\\.匹配从#到 的所有字符.

于 2012-04-27T11:26:00.690 回答