2008-10-13 27 views
33

这个问题很容易。正则表达式来判断一个字符串是否不包含特定字符

我想测试一个字符串是否不包含使用正则表达式的字符。我认为这个表情的形式是“[^ x]”,其中x是你不想出现的角色,但这似乎不起作用。

例如,

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

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

都返回真(我期望假)。

我开始使用"[^&]",也许&需要转义为\ &,但似乎没有什么区别。

想法?我认为它很小。

此外,我使用.NET,所以请记住。

EDIT1:

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

EDIT2:

我想给KevinJoel的建议作出回应。这些建议确实会更快,但在这种情况下,他们没有达到我需要的灵活性,所以如果您通过搜索找到了这个问题,那么一定要看看他们的答案是否符合您的需求。在我的情况下,正则表达式传递给一个DataTable验证方法,该方法循环遍历每一行,并验证特定列中该行的内容是否与正在传入的RegEx相匹配。由于我将重用此方法对于正在验证等几个数据表,我想:

  1. 使用正则表达式来实现验证的范围最广,并且
  2. 总是寻找一个积极的匹配(即不是使用的Regex.IsMatch(细胞! ,regexvariable),我想依靠总是能够使用Regex.IsMatch(cell,regexvariable),因为调用这个方法的大多数DataTables将使用正匹配而不是负数

希望有帮助。

+0

如果只检查单个字符的存在,你可以没有正则表达式会好得多。凯文是正确的:使用.IndexOf()或更简单。它会更可读,更清晰,更快速。 – ruquay 2008-10-13 20:08:46

回答

51

您的解决方案是一半的权利。你看到的比赛是其他人物。你想说的话就像是“嗨!我不想在整个字符串中看到这个字符”。

在这种情况下,你做的事:

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

谢谢!我也尝试过“^ [^ 0] $”,但放弃了^和$,因为它导致所有内容都被评估为false - 只需要星号即可。再次感谢 - 我的“两个问题”现在已经回归到零。 – jerhinesmith 2008-10-13 19:51:19

+4

我猜这个!Regex.IsMatch(“103”,“0”)实际上会更快。 – Kip 2008-10-13 20:03:12

+0

我正在使用这个,我不想看到字符`?`,````和`]`,我试着`^ [^?] * $`,基于上面的```例如,但是当我添加括号字符时,它不起作用...`^ [^?[]] * $` – raffian 2012-10-10 17:28:24

4

解析器达到第一个字符是“1”,这是真正的[^ 0],也是如此[^ &],因此,它会返回在这两个例子中都是如此。

7

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

2

你把你的否定放在错误的地方。 [^x]将匹配任何不是x的东西。如果x在字符串中,那么如果还有其他字符,字符串仍然与表达式匹配。相反,你想如果x是有匹配真实,然后否定函数的结果:

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

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

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

16

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

2

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

^((?0)。)* $

相关问题