2011-06-21 9 views
2

提供されたデリミネータの入力.DATファイルレコードを検証する必要があります。C#の正規表現を使用した検証アプリケーション

我々はすべてのdeliminatorが 元、適切な提供されるdeliminatorごとに入力ファイルを解析することができ、当社の.NETアプリケーションで

:「テスト」、「データ」、「CaseInforation」

レコード/行以上のファイルからが解析されますそれが問題を作成

「テスト」、データ、「CaseInforation」 (uが見ることができる「データ」値&に囲まれたいかなるテキスト修飾子はこのためにありません:成功し、今、私たちは以下のようにフォーマットされた行/記録に問題がありますファイルからデータを解析中)。

そこで、TextQualifierで囲まれていない問題のある値を見つけるために、正規表現を使用することにしました。この問題を解決するために、我々は問題のある値、 \ X2C([^ \ X22]。*?[^ \のX22])を見つけるために、正規表現の下に作成した

正規表現の上に使用して\ X2C

は、それが動作最初の&最後のフィールドの間にレコードがあります。

"Test"、データ、 "CaseInforation" - >正規表現でこのレコードを正常に解析します。&問題のある出力フィールドとしてデータを提供しています。

このレコードの正規表現の "Test"、 "data"、CaseInforation - >最後の値と一致しません。

いずれも、最初または最後の値と一致する正規表現を修正するのに役立ちます。

ありがとうございました。

+0

私は解決策の股関節を掲載しましたおそらくあなたのニーズを満たすでしょう。 –

答えて

0

これらの行には何かがありますか?

/^"\w+","?(.+)"?,"\w+"$/ 
3

^(?:(?:"((?:""|[^"])+)"|([^,]*))(?:$|,))+$あなたはmatch.Groupsを使用することができ、行全体にマッチします[1](引用符なし)あなたのデータを取得するために.Captures。また、"My name is ""in quotes"""を有効な文字列にします。

string mystring = "\"Test\",\"data\",\"CaseInforation\""; 
MatchCollection matches = Regex.Matches(mystring, "^(?:(?:\"((?:\"\"|[^\"])+)\"|([^,]*))(?:$|,))+$"); 
match[0].Value = "Test","data","CaseInforation" 
match[0].Groups[0].Value => "Test","data","CaseInforation" 
match[0].Groups[0].Captures[0].Value => "Test","data","CaseInforation" 
match[0].Groups[1].Value => CaseInforation 
match[0].Groups[1].Captures[0].Value => Test 
match[0].Groups[1].Captures[1].Value => data 
match[0].Groups[1].Captures[2].Value => CaseInforation 
+0

参考情報ありがとうございました – Annaya

0

シンプル[^\",]+があればどのような「あなたの値ごとに1試合を与えるべきであるのと、年代が値の間にある。そして、任意の値の内側に存在する場合、その値はちょうど2つに分割されます。

ので、このような何か:。

foreach(Match match in Regex.Matches(data, "[^\",]+")) 
{ 
    Console.WriteLine(match.Value);//or whatever 
} 

あなたは"Test",data,"CaseIn"foration"を持っている場合は、テスト、データ、カゼインを取得し、アウトforationでしょうけれども

+0

regExがquote.butの文字列と一致する場合は、指定されたstring.exと一致しない値を直接得ることができます。 「ID」、「ファイル名」、「件名」を意味するすべての値に一致する正規表現の文字列)は、今すぐ取得できます一致する刺し込みは上の文字列から – Annaya