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,我想:
- 使用正则expression式来启用最广泛的validation和
- 总是寻找一个积极的匹配(即而不是使用!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)。)* $