有効なカンマを含むCSVの分離~Regex
123 , "a , bb ,cc " , ' 漢字、ひらがな、カタカナ' , 備後国 ,上州
こういうデータがCSV形式で提供されることが、往々にしてあります。
ExcelなどのアプリケーションでCSV出力したとき、データとして","があったとき、"か'で括ることになっているのかもしれません。
受け取る側で、"か'を考慮して分離する必要があります。処理としては最初から読んでいき、Quateの出現回数の偶数奇数で有効カンマか否かの判定すれば、良いのですが、正規表現で実装してみました。
ここ
最後に ","が付かないとき、最後の項目を落とし勝ちです、肯定先読み(?=(,|$))で対処すると、1つのパターンで対処できます。
パターン = "\s*(?<a>["']?)(?<fact>.*?)(?(a)\k<a>)\s*(?=(,|$))"
・少し解説
切り出した単語は Group名<fact> に格納されます。
"~" もしくは '~' もしくは {無冠}から{無冠} の区別は (?<a>["']?) で判定します。 "か ' のいずれかが始まると、<a>に値が格納されます。{無冠}の時は、<a>は未確定で続行されます。
<a>が確定しているときは(?(a)\k<a>)が有効で、<a>の種別で括った範囲が <fact>に格納されます。
<a>が未確定のときは(?(a)\k<a>)が無視されねので普通に <fact>に格納されます。