CSVデータの、文字列データのカンマを検索する。 文字列データは、ダブルコーテーションでくくったデータですが、 連続したダブルコーテーションは、文字としてのダブルコーテーションとします(VBのエスケープ方式) 検索前 検索後
1,2,3,"abcd,efg","a,bc","dd"""",""ee" "aaa,aa""c,cc",1,2,3 4,5,6,""","",""ab,""c,d""e,f"
,(?!(([^"]*"){2})*[^"]*$)
行末までのダブルコーテーションの数は、偶数か奇数なので 行末までのダブルコーテーションの数が偶数でなければ、 行末までのダブルコーテーションの数が奇数なので、 文字列データのカンマだと判断してます。 行末までのダブルコーテーションの数が偶数であることは、 行末までのダブルコーテーションの数が奇数であることの 余事象であると考えてもいいでしょう。 事象と集合 ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ なお、文字列データでないカンマは ,(?=(([^"]*"){2})*[^"]*$) となりますので、 JavaでCSVを読み込む処理を記述する際には、 String[] csv = (CSVのデータ).split(文字列データでないカンマ) といった記述が使えます。 String.splitメソッド VB.NETでCSVを読み込む処理を記述する際には、 Dim csv as String() = Regex.Split(CSVのデータ,文字列データでないカンマ,RegexOptions.ExplicitCapture) といった記述が使えます。 Regex.Splitメソッド ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■ ちなみに、正規表現を使う必要がない場合は、split関数で十分です。 @IT:.NET TIPS 文字列を文字列により分割するには?(VB.NET関数活用) - C#