RegEx判断一个string是否不包含特定的字符

这个问题很容易。

我试图testing一个string是否不包含使用正则expression式的字符。 我认为这个expression的forms是“[^ x ]”,其中x是你不想出现的字符,但是这似乎不起作用。

例如,

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

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

两者都返回true(我会期待false)。

我开始使用"[^&]"并认为可能需要“逃避”,但似乎没有什么区别。

想法? 我认为这是小事。

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

EDIT1:

我发现这个 ,但似乎没有回答我遇到的问题。

EDIT2:

我想回应凯文和乔尔的build议。 这些build议确实会更快,但是在这种情况下,我们并没有达到所需的灵活性,所以如果您通过searchfind了这个问题,那么一定要看看他们的答案是否符合您的需求。 在我的情况下,正则expression式传递给DataTablevalidation方法,该方法循环遍历每一行,并validation特定列中该行的内容是否与正在传入的RegEx相匹配。由于我将重复使用此方法对于正在validation的其他几个DataTable,我想:

  1. 使用正则expression式来启用最广泛的validation和
  2. 总是寻找一个积极的匹配(即而不是使用!Regex.IsMatch(cell,regexvariable),我想依靠总是能够使用Regex.IsMatch(cell,regexvariable),因为大多数的DataTables调用这个方法将使用积极的匹配而不是消极的。

希望有帮助。

你的解决scheme是对的。 你看到的比赛是其他人物。 你想说的是“嘿,我不想在整个string中看到这个字符”。

在这种情况下,你可以:

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

模式[^ 0]将匹配任何不是零的字符。 在这两个示例中,模式都将匹配第一个字符(“1”)。 为了testing整个string是否不包含零,模式应该是“^ [^ 0] * $”。 如下所示:从string的开始处开始,匹配任意数量的不为零的字符,然后紧接着string的末尾。 任何包含零的string都将失败。 任何不包含零的string都会通过。

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

parsing器到达的第一个字符是“1”,对于[^ 0]是正确的,对于[^&]也是如此,所以在这两个例子中它都会返回true。

你把你的否定放在错误的地方。 [^x]将匹配任何不是x的东西。 如果x在string中,那么如果还有其他字符,string仍然匹配expression式。 相反,如果x存在,则要匹配true,然后否定函数的结果:

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

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

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

^((?0)。)* $