初めてのポスター、長年のユーザー。この正規表現を使用したこのデータが失敗するはずのときに、なぜこのデータが通過するのかわかりません。簡単な概要は、パイプで区切られたデータを含むテキスト ファイルがあることです。各行を一度に 1 つずつ読み取り、合格/不合格の正規表現と比較しています。
問題のデータは次のとおりです。
|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 |#|ブール|#|ブール|#|ブール|#|ブール|#|
これは私の正規表現です (警告: ちょっと長いです):
^[\|]{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 の余分なフィールドがあるため、私が示したサンプル データは失敗するはずです。2 行目も余分なフィールドのために失敗するはずです (しかし、その行は空です)。「#|#|Name|bool」では、091091 が名前とパスに入力されているように見えるため、正規表現を何時間も見つめましたが、「RGT Foods, Inc.」0または1として渡すべきではありません...しかし、両方の行が正規表現を渡します。何が間違っていますか?
ありがとう。