- - PR -
csvデータを正規表現で抽出する
| 投稿者 | 投稿内容 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-08-19 16:19
"aa","s\"f","ss,12"文字列を[aa] [s"f] [ss,12]に個々のデータを抽出したい。
その文字列の正規表現の書き方を誰が教えてくれませんか? | ||||||||
|
投稿日時: 2004-08-19 16:39
たぶん、短いのは作れない。
”と , の解釈が 後方の文字列全体に依存するから。 (短距離パターンを見るだけで解決しないから) ごまかしレベルなら "," でスプリット。手作業エディタ処理なら使える ============================================= 文字列内の引用符を ダブらせるのは 汎用機の アセンブラやCOBOL 以来のものです。 ¥記法より 古いかも。 [ メッセージ編集済み 編集者: MMX 編集日時 2004-08-23 09:50 ] | ||||||||
|
投稿日時: 2004-08-19 17:00
ええと。 * フィールドは必ずダブルクォートで括られている。 * フィールド区切りのカンマの前後にスペースはない。 と多少限定させてもらった上で。 "(.*?(?<!\\))",? というパターンで文字列の中を進んでいけばフィールドの内容を拾っていけるでしょう。 ただし、拾ったあと、「\"」を「"」に直してやる必要がありますかな。 こんなPerlコードで動作を確認してます。すみませんJavaじゃなくて。 やっぱ正規表現をさくっと試すにはPerl等の「正規表現リテラル」を 認識する言語のほうがやりやすいです。
[ メッセージ編集済み 編集者: 佐々木 編集日時 2004-08-19 17:03 ] | ||||||||
|
投稿日時: 2004-08-19 17:01
ちょっと自信ないのですが(あくまでご参考。。。)
[ メッセージ編集済み 編集者: Ken-Lab 編集日時 2004-08-19 17:07 ] ・・・と思ったらカンマを抜き忘れたので読み飛ばしといてください。 (^^; [ メッセージ編集済み 編集者: Ken-Lab 編集日時 2004-08-19 17:13 ] | ||||||||
|
投稿日時: 2004-08-19 17:23
Javaでも書いてみました。
Javaにも「メタ文字を解釈しない文字列リテラル」とか「文字列リテラルのクォート記号を任意に選べる機能」が欲しいですねぇ。 正規表現が"\"だらけになっちゃうんですよね。 | ||||||||
|
投稿日時: 2004-08-19 18:02
佐々木さん:
ありがとうございます、その方法で問題を解決しました。 | ||||||||
|
投稿日時: 2004-08-19 18:16
どもでし。がるともうします。
んと、ものすごく余談で申し訳ないのですが。
しっているCSVの実装系のほとんどで、[aa] [s"f] [ss,12]の 三つのデータを記述する場合って aa,"s""f","ss,12" だと思うですが。もう少し具体的には「データ中の"は、"の二重 であらわす」のが多いパターンだと思うです。 ¥(バックスラッシュ)でエスケープするパターンというのは、 Javaでは普通に行われてるパターンなんでしょうか? & JavaでのCSVで、"をあらわすのに上記のように"の二重であらわすと、 なにか問題とか起きるでしょうか? いあ、単純に興味があって気になったもので。 | ||||||||
|
投稿日時: 2004-08-19 18:30
Microsoft Excelが入出力を行うCSVファイルのフォーマットがそうなって いますね。それゆえに、それが事実上の標準になっている?ということでし ょうか。そもそもCSVフォーマットって標準化はされていなかったような…
そのようなフォーマットに対して適切なパーサ/ジェネレータを作って あるならば、どのような言語を利用するにしても問題はないかと思い ますが… #曖昧なフォーマット定義になるのが嫌でXMLに逃げたくなることもある #のですが、如何せんユーザの方々はCSVを入出力にすることを望むこと #が多いので、難しいところです。Excel万歳。 [ メッセージ編集済み 編集者: シュン 編集日時 2004-08-19 19:02 ] | ||||||||
