第一次发帖,老用户。我不明白为什么这个正则表达式的数据在它应该失败时会通过。快速概述是我有一个带有管道分隔数据的文本文件。我一次阅读每一行,并与正则表达式进行比较以判断通过/失败。
这是有问题的数据:
|A|00032004|00032004|25 S Kings Highway||Cape Giradeau|MO|63701|345800886888|0000254575|091091|RGT Foods, Inc.|1|345800886888|1|345800886888|1|601103061404806|1|003241699917|0|000000000000|0|000000000000|0|000000000000|0|000000000000|
|A|00032005|00032005|1009 Kings Hwy||Rolla |MO|65401|345800885880|0000254564||RGT Foods, Inc.|1|345800885880|1|345800885880|1|601103061404798|1|003241699925|0|000000000000|0|000000000000|0|000000000000|0|000000000000|
以下是基本分类:|D、U 或 A|ID#|ID#|St Add1|St Add2|City|ST|Zip|#|#|Name|bool|#|bool|#|bool|#|bool |#|bool|#|bool|#|bool|#|bool|#|
这是我的正则表达式(警告:它有点长):
^[\|]{1}[DUA]{1}[\|]{1}[0-9,A-Z]{8}[\|]{1}[0-9,A-Z]{8}[\|]{1}.{0,25}[\|]{1}.{0,25}[\|]{1}.{0,25}[\|]{1}[A-Z,a-z]{2}[\|]{1}[0-9]{5}[\|]{1}[A-Z,a-z,0-9]{12}[\|]{1}[A-Z,a-z,0-9]{10}[\|]{1}.{0,25}[\|]{1}[0,1]{1}[\|]{1}[0-9]{12}[\|]{1}[0,1]{1}[\|]{1}[0-9]{12}[\|]{1}[0,1]{1}[\|]{1}[0-9]{15}[\|]{1}[0,1]{1}[\|]{1}[0-9]{12}[\|]{1}[0,1]{1}[\|]{1}[0-9]{12}[\|]{1}[0,1]{1}[\|]{1}[0-9]{12}[\|]{1}[0,1]{1}[\|]{1}[0-9]{12}[\|]{1}[0,1]{1}[\|]{1}[0-9]{12}[\|]{1}
这是我的正则表达式函数:
//Compare the entire line at once
public static bool MatchCCRegEx(string spLine)
{
try
{
Regex CCLineCheck = new Regex(
Properties.Settings.Default.CCRegExValidationString);
Match CCLineMatch = CCLineCheck.Match(spLine);
if (CCLineMatch.Success)
return true;
else
return false;
}
catch (Exception RegExCheckExc)
{
WELogger.LogEvent("3",
"Error running RegEx check on this line:\r\n"
+ spLine + "\r\n" + RegExCheckExc.ToString());
Environment.Exit(9);
return false;
}
}
我给出的示例数据应该失败,因为在 # 和 Name 之间有一个值为 091091 的额外字段。第二行也应该因为额外字段而失败(但该字段为空)。我已经盯着正则表达式看了好几个小时,因为在我看来,“#|#|Name|bool”中的 091091 会被输入名称并通过,但是“RGT Foods, Inc.” 不应该作为 0 或 1 传递...但是两行都通过正则表达式,我做错了什么?
谢谢。