检查文本中是否有多个RegEx匹配项

本文关键字:RegEx 文本 是否 检查 | 更新日期: 2023-09-27 18:25:40

下面的代码读取一些文本(从OCR库中扫描)a检查文本中是否有几个简单的单词"The"、"date"、"or"、"to"、"and"。。。。如果找到其中一个单词,则此函数将返回true>>,这意味着它刚刚扫描的页面已按正确方式翻转。如果函数返回false,则页面将倒置,并移动到旋转页面的函数。

我只是想找出最好的方法。我不是regex大师,但第一个if语句返回true(所以它找到了"date")。然而,第二个if语句返回为false,即使我正在再次寻找"日期"。

Conditional 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;           
        }

检查文本中是否有多个RegEx匹配项

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

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

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

此外,如果只想在第二个if语句中的表达式都不匹配的情况下使用return false,则可能需要使用&&运算符。

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

为了简化/提高可读性,您可以在单个Regex中评估不同的"或"表达式,如下所示:

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