トップページに戻る    次の正規表現パズルへ    前の正規表現パズルへ

4-30 CSVのn番目のデータ区切りまでマッチその2

正規表現パズル

CSVの2番目のデータ区切りのカンマまでマッチさせる。

文字データとしてのカンマは、考慮する。

CSVの形式は、以下の通りです。

文字列データの中に、
カンマも、文字としてのダブルコーテーションもない場合は、
文字列データがダブルコーテーションでくくってないこともある

ダブルコーテーションでくくったデータの中での、
連続したダブルコーテーションは、文字としてのダブルコーテーションとします(VBのエスケープ方式)

不正なCSVの形式は考慮しない

検索前


検索後


対象データ

111,"Oracle""SQL",1,a
222,"Ruby",2,b
333,Regex,3,c
444,"MySQL"""",""""",4,d
555,"Perl"","""",",5,e
666,,6,f
777777,Java,g,7
888,VB2005,h,8
XXX,111,"Oracle""SQL",1,a
XXX,222,"Ruby",2,b
XXX,333,Regex,3,c
"Y",444,"MySQL"""",""""",4,d
YYY,555,"Perl"","""",",5,e
"X""Y",666,,6,f
"""Z""",777777,Java,g,7


正規表現

^((((?!,(([^"]*"){2})*[^"]*$).)*),){2}

別解

^(([^",]*|"((?!,(([^"]*"){2})*[^"]*$).)*),){2}


解説

行末までにダブルコーテーションが偶数個なければ、文字列データのカンマ
だと判断してます。

別解では、ダブルコートでくくられているかで場合分けしてます。
大量データの場合は、別解のほうがレスポンスがいいかもしれません。

2-35 次に文字列ABCがある、文字X以外を検索