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#