RegEx告诉字符串是否包含特定字符

时间:2008-10-13 19:43:06

标签: .net regex regex-negation

这次很容易提问。

我正在尝试测试字符串是否包含使用正则表达式的字符。我认为表达式的格式为“[^ x ]”,其中 x 是您不想出现的字符,但似乎不是工作

例如,

Regex.IsMatch("103","[^0]")

Regex.IsMatch("103&","[^&]")

都返回true(我希望是假的)。

我开始使用"[^&]"并认为可能是&需要作为\&转义,但它似乎没有什么区别。

想法?我认为它很小。

另外,我正在使用.NET,所以请记住这一点。

EDIT1:

我找到了this,但它似乎没有回答我遇到的问题。

EDIT2:

我想回复KevinJoel的建议。这些建议确实会更快,但是在这种情况下它们无法实现我需要的灵活性,所以如果你通过搜索找到这个问题,那么一定要看看他们的答案是否符合你的需求。在我的例子中,正则表达式被传递给DataTable验证方法,该方法遍历每一行并验证特定列中该行的内容是否与传入的RegEx匹配。因为我将重用此方法对于其他几个正在验证的DataTable,我想:

  1. 使用Regex启用最广泛的验证,
  2. 总是寻找一个积极的匹配(即代替使用!Regex.IsMatch(cell,regexvariable),我想依靠始终能够使用Regex.IsMatch(cell,regexvariable),因为大多数DataTables调用此方法将使用正匹配而不是否定。
  3. 希望这有帮助。

6 个答案:

答案 0 :(得分:51)

你的解决方案是对的。您看到的匹配是针对其他角色的。你想说的是“嘿!我不想在整个字符串中看到这个字符”。

在这种情况下,您可以:

Regex.IsMatch("103","^[^0]*$")

答案 1 :(得分:17)

模式[^ 0]将匹配任何非零的字符。在两个示例中,模式将匹配第一个字符(“1”)。要测试整个字符串是否不包含零,模式应为“^ [^ 0] * $”。其内容如下:从字符串的开头开始,匹配任意数量的非零字符,紧接着字符串的结尾。任何包含零的字符串都将失败。任何不包含零的字符串都将通过。

答案 2 :(得分:7)

如果你正在寻找一个字符串中的单个字符,正则表达式似乎有点矫枉过正。为什么不直接使用.IndexOf或.Contains?

答案 3 :(得分:4)

解析器到达的第一个字符是“1”,对于[^ 0]是正确的,对于[^&]也是如此,因此它们将在这两个示例中返回true。

答案 4 :(得分:2)

你把你的否定放在了错误的地方。 [^x]将匹配任何非x的内容。如果x在字符串中,则如果还有任何其他字符,则字符串仍然与表达式匹配。相反,如果x在那里,你想匹配true,然后否定函数的结果:

Not Regex.IsMatch("103", "0")

Not Regex.IsMatch("103&", "&")

不是这些简单的例子,正常的String.IndexOf()或String.Contains()将是更好的选择。

答案 5 :(得分:2)

我遇到了这个问题,寻找同样的东西,但对于JavaScript。上面的表达在我的情况下不起作用,但我遇到了下面的表达式。 (以防万一其他寻找JavaScript解决方案的人也会在这里结束。)

^((?!0).)*$

此构造称为Negative Lookahead