REGEX匹配测试仪而不是C#

时间:2013-12-27 14:56:18

标签: c# .net regex

我有一个来自文件的行:; STRING WBSALT1()

和代码

if (!Regex.IsMatch(line, @"\s*(;)(.*)", RegexOptions.IgnoreCase))
   {
       //do
       //stuff
   }

由于某种原因,REGEX与文件中的那一行不匹配。我通过测试仪运行它,它捕获它就好了。有谁知道还有什么可能导致这个问题?

然而,它将与此匹配(在代码中,而不是在正则表达式测试器中)

if (Regex.IsMatch(line, @"\s*(string)\s*(.*\()\s*(\d*)\)\s*;?(.*)", RegexOptions.IgnoreCase))

对我来说真的没有任何意义。我对文件中看起来类似的数千个其他行没有其他问题。有什么想法吗?


编辑:好的,所以我没有把它放在问题中,因为我觉得没必要。显然它是:

我的实际if声明如下:

if (!Regex.IsMatch(line, @"\s*;.*") || !Regex.IsMatch(line, @"\s*(origin)\s*(.*)", RegexOptions.IgnoreCase))

现在,当我取消||语句时,它正常工作。为什么这样做我不明白。也许有人对此有所了解?

2 个答案:

答案 0 :(得分:4)

在我的环境中测试并按预期工作。

        string line = "; STRING WBSALT1()";

        if (!Regex.IsMatch(line, @"\s*(;)(.*)", RegexOptions.IgnoreCase))
           {
               //do
               //stuff
           }

想知道你是否也不打算“!”成为条件的一部分

 if(! ...

此致

答案 1 :(得分:2)

只是为了添加你,如果你使用的是IgnoreCase,则不需要设置.*,你可能会丢失捕获组。您可能还想添加开始^和结束$行锚点。

Ideone

上进行测试
string line = "; STRING WBSALT1()";
if (!Regex.IsMatch(line, @"^\s*;.*$")) {
   // do something
}