C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[6]: 正規表現


(過去ログ 97 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■57810 / inTopicNo.1)  正規表現
  
□投稿者/ 焦げ太 (18回)-(2011/03/16(Wed) 14:21:06)

分類:[C#] 

こんにちは。
正規表現について教えてください。

正規表現でタブで区切ったデータを取得したいのですが
"\t\t123\t456\t"というデータだった場合
以下の(正)の4つの文字列として取得したいのですが、
先頭2つのデータが無視されて(誤)のようになって
しまいます。

(正)
""
""
"123"
"456"

(誤)
"123"
"456"

正規表現についてググって調べたのですが、正規表現の箇所を
どのように変えたらよいのかわかりません。
実際はタブ区切り、カンマ区切りなど引数に応じて変わります。
カンマ区切りの場合を考慮し、ダブルクォーテーションの処理も
入っています。ご教授のほどお願いいたします。

string sep = "\t";
string reg_str = "\\s*(\"(?:[^\"]|\"\")*\"|[^" + sep + "]*)\\s*" + sep;
string str = "\t\t123\t456\t"

Regex reg = new Regex(reg_str, RegexOptions.None);
Match m = reg.Match(str);

引用返信 編集キー/
■57811 / inTopicNo.2)  Re[1]: 正規表現
□投稿者/ shu (520回)-(2011/03/16(Wed) 14:46:49)
No57810 (焦げ太 さん) に返信

Split使うといいんじゃないかな?
引用返信 編集キー/
■57812 / inTopicNo.3)  Re[2]: 正規表現
□投稿者/ 焦げ太 (19回)-(2011/03/16(Wed) 15:02:08)
No57811 (shu さん) に返信
> Split使うといいんじゃないかな?

返信ありがとうございます。
当初はSplitでやっていたのですが、以下のようなダブルクォーテーションの
処理がうまくいかないため正規表現にしました。

タブ区切りだとあまりないのでカンマ区切りを例にします。
例えばエクセルから出力したCSVなどデータにカンマが含まれる場合に
ダブルクォーテーション""で括られてデータとします。

"0","1,234","999"

この場合Splitだと以下のようになってしまいます。
"0"
"1
234"
"999"

引用返信 編集キー/
■57813 / inTopicNo.4)  Re[3]: 正規表現
□投稿者/ 焦げ太 (20回)-(2011/03/16(Wed) 15:04:41)
すいません。
先ほどの送信後に思ったのですが正規表現で区切る前に
単純にループで先頭データをチェックしていけば解決しますね。
お騒がせしました。

解決済み
引用返信 編集キー/
■57818 / inTopicNo.5)  Re[4]: 正規表現
□投稿者/ shu (521回)-(2011/03/16(Wed) 21:35:38)
No57813 (焦げ太 さん) に返信
> すいません。
> 先ほどの送信後に思ったのですが正規表現で区切る前に
> 単純にループで先頭データをチェックしていけば解決しますね。
> お騒がせしました。
>

解決したようですが正規表現の方をよく見てみたら\sはTabを含んでいるのでTabの場合\s*にtabが吸収されてしまうのではないでしょうか。

"[\\s-[" + sep + "]]*(\"(?:[^\"]|\"\")*\"|[^" + sep + "]*)[\\s-[" + sep + "]]*" + sep

これでどうでしょう。
解決済み
引用返信 編集キー/
■57824 / inTopicNo.6)  Re[5]: 正規表現
□投稿者/ 焦げ太 (21回)-(2011/03/17(Thu) 08:59:18)
No57818 (shu さん) に返信
ご提示いただいた方法で試したところ思うようにできました。
正規表現には不慣れなもので、内容をじっくり見て勉強します。
ありがとうございました。

引用返信 編集キー/
■57825 / inTopicNo.7)  Re[6]: 正規表現
□投稿者/ 焦げ太 (22回)-(2011/03/17(Thu) 08:59:41)
おっと、解決忘れました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -