- - PR -
正規表現でダブルクォーテーション囲み&カンマ区切りを表現したい
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-07-12 01:18
こんにちは。
VB.NETでプログラミングしています。 自作クラスのプロパティ値(string)に複数の値(複数の文字列)をセットしたく、正規表現でダブルクォーテーション囲み&カンマ区切りを表現したいのですが、なかなか上手くいきません。 (プロパティ値をどうしても1つの文字列として扱いたく、複数の文字列のシリアル化を考えたのですが、バイナリ等になるとメンテナンスが大変になるので、正規表現に走りました。) [正規表現で表したいこと] ・1つの文字列はダブルクォーテーションで囲む ・複数個の文字列はカンマで区切る(カンマで終了してはいけない) ・ヌル、スペース、タブは文字列として許さない ・正規表現をクリアした場合は、ダブルクォーテーションを含まない文字列をキャプチャしたい 例. OK: "abc" → abcをキャプチャ "abc","def","ghi" → abcとdefとghiをキャプチャ "ab"c","d,ef" → ab"cとd,efをキャプチャ NG: "abc", "" " " "","abc" 勉強不足で恐縮ですが、ご教授の程よろしくお願い致します。 | ||||
|
投稿日時: 2004-07-12 08:51
私も色々考えたのですが...外部からは与えられない、と考えていいのでしょうか?外部から、「abc,"aa""bb""cc",cde」(abc aa"bb"cc cde)と与えられたら、どうなるのでしょう?
そういうことを考えると、「"""csv"",""in"",""csv"""」なんてことをやられると、とっても面倒なんですよね 先読みか、後戻りが必要なので、正規表現でするのは、ちょっと苦しいかと。。。 [ メッセージ編集済み 編集者: Jitta 編集日時 2004-07-12 08:51 ] 項目数が決まっているなら、 ^".+",(".+",){項目数-2}".+"$ で、検査はできると思います。取り出しは、CaptureCollectionクラスかなぁ? [ メッセージ編集済み 編集者: Jitta 編集日時 2004-07-12 12:13 ] | ||||
|
投稿日時: 2004-07-12 12:16
ども、ほむらです。
いわゆるエクセルで出力するようなK3形式のCVSを分解できればよいのですよね? 以前にもどこかで出した記憶があるのですがperlだとできるのでJavaや.NETみたいな 正規表現を持っているものであればできると思いますよ。 最悪個人ユースであればpcre.dllを利用してみるとか ポイントは最短マッチと最長マッチの組み合わせです。 "が続かない最長マッチ または"を含まない,までの最短マッチ # とりあえず列の取り出し; my @result = ($work =~ m/((?:\".*?[^\"]\")[ \t]*|(?:.*?))\,/sg); # /sgは .に改行を含めてGlobal検索を有効にするということです。 # /s がない場合には(?:.|\r\n)で代用できるはず。 # @result は列を保存するための一元配列です くわしくはこちらをどうぞ。 http://www.google.co.jp/search?q=site%3Awww.atmarkit.co.jp+%E3%81%BB%E3%82%80%E3%82%89%E3%81%A7%E3%81%99%E3%80%82+perl+CSV&ie=UTF-8&hl=ja&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=lang_ja | ||||
|
投稿日時: 2004-07-12 15:36
ども、ほむらです。
.NETのところで何度もPerlの話をするのも気が引けたので 勉強がてらVB.NETで作ってみました。 初めてのプログラムなので変な記述になっている部分が多いかと思います。 分解してArrayListに追加する部分でデータの整合性チェックなどをしているのですが この部分でバグがあるらしく、""というデータでエラーになってくれません。 あくまで参考程度にどぞ。 追伸: 変なところとか、改善点はどんどん指摘してもらえるとうれしいです。 #BBコード記述ミスを修正
[ メッセージ編集済み 編集者: ほむら 編集日時 2004-07-12 15:38 ] | ||||
|
投稿日時: 2004-07-12 15:53
Jittaさん、ほむらさん、ご返答ありがとうございます。
早急にご返答頂いたのですが、なにせ正規表現(VB.NETも)初心者なもので、ご返答頂いた内容を理解して自分のものにするのに少々時間がかかりそうです。(なさけない・・・) まずはお礼まで。 |
1