下面的代码读取一些文本(从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;
}
答案 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)