检查多个RegEx匹配的文本

时间:2013-07-31 22:03:13

标签: c# regex logical-operators

下面的代码读取一些文本(从OCR库中扫描)a检查文本中的几个简单的单词“the”,“date”,“or”,“to”,“and”....如果它找到其中一个单词然后这个函数返回true>>>这意味着它刚刚扫描的页面正确的方式。如果函数返回false,则页面颠倒并移动到旋转页面的函数。

我只是想弄清楚这样做的最好方法。我不是一个正则表达式大师,但是第一个if语句返回true(所以它找到'date')。然而,即使我再次寻找'date',第二个if语句也会返回false。

条件OR ||是否与正则表达式无关?

static Boolean CheckIfPDFisTurnedRightWay(List<tessnet2.Word> wordList)
        {
            if (wordList.Count >= 70)
            {
                var text = wordList.Select(w => w.Confidence >= 40 ? w.Text : "DONTMATCH").Aggregate((x, y) => x + " " + y);
                if (!Regex.IsMatch(text, @"date", RegexOptions.IgnoreCase))
                    return false;
                if (!Regex.IsMatch(text, @"[trf]h[ec]", RegexOptions.IgnoreCase) | !Regex.IsMatch(text, @"date", RegexOptions.IgnoreCase) || !Regex.IsMatch(text, @"[a0o][tfr]", RegexOptions.IgnoreCase) || !Regex.IsMatch(text, @"[ao]nd", RegexOptions.IgnoreCase) || !Regex.IsMatch(text, @"[frt][o0]", RegexOptions.IgnoreCase))
                    return false;                              
            }
                return true;           
        }

2 个答案:

答案 0 :(得分:1)

IsMatch只返回一个布尔值,因此您应该可以使用||

你可能有拼写错误。查看前两个!Regex.IsMatch语句之间的单个管道:

if (!Regex.IsMatch(text, @"[trf]h[ec]", RegexOptions.IgnoreCase)
    | !Regex.IsMatch(text, @"date", RegexOptions.IgnoreCase)
    || ...

此外,如果您只想return false,如果第二个if语句中没有任何表达式匹配,您可能希望改为使用&&运算符。

if ((text doesn't match 1st expression) and (text doesn't match 2nd expr) and ... )
    return false;

答案 1 :(得分:1)

为了简化/提高可读性,您可以评估不同的&#34;或&#34;单个正则表达式中的表达式如下:

if(!Regex.IsMatch(@"(date|[trf]h[ec]|[a0o][tfr])", RegexOptions.IgnoreCase)