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

5-11 項目数が3つの行を検索

正規表現パズル

項目数が3つの行(データ区切りのカンマが2つの行)
を検索する。

CSVの形式は、5-1 CSVのデータを検索(VBのエスケープ方式)と同様。

検索前


検索後


対象データ

1,2,3,4,5,6,7,8,9
1,2,3,4,5,"6","7"
1,2,"abcd,efg","a,bc","dd"""",""ee"
"aaa,aa""c,cc",1,2,3
4,5,6,""","",""ab,""c,d""e,f"
"""vvv"
","",dddd""""""gg"""
555,"""""4444""",12345
555,"""""4444""",12345,"""""444""111"
1,2,3
1,2,3,4
"1,",2,3
"1,"",2",3
1,2,"3,4"


正規表現

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


解説

カンマでない、または、行末までにダブルコートが偶数個でないカンマ
にマッチする正規表現と、
行末までにダブルコートが偶数個であるカンマ
にマッチする正規表現
を組み合わせてます。

なお、項目数が4つの行(データ区切りのカンマが3つの行)
を検索する正規表現は、こうなります。

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