From: futami ryutaro Date: 1997-11-18T11:21:26+09:00 Subject: [ruby-list:5314] 正規表現について はじめまして、二見です。 最近、rubyを使い始めました。 とりあえずテキスト処理を行っているのですが 望み通りの動作をしなくて困っています。 やりたいことは下記のテキストデータの内容を 表計算用のデータに加工しようと思って、 プログラムを作成しました。 内容としては ・前後に空白2個を持った4〜6桁の数字にマッチしたら  データ行と認識してnumとtypeを取り込む。 ・先頭が英数字(空白ではない)だったらitemとして取り込む。 ・それ以外は無視する。(行頭が空白ならコメント行として無視) この状態で実行したのですが、実行結果を見ると itemの取り込みがうまくいきません。 希望としてはitemは"1st item"と"2nd item"だけなのですが データ行もitemとして取り込んでしまいます。 原因を調べたのですが行頭が空白のコメント行が関係するようです。 行頭が空白かつ文頭が数字3桁以上ではじまるコメント行があると その後のitemの取り込みがうまくいかないようです。 そこで教えてください。 ・この正規表現で問題ありませんか? ・正しく動かすにはどこを直せばいいのでしょうか? よろしくおねがいいたします。 ****テキストデータ "chk.txt"**** 1st item 300type 2300 UP 300type 3100 NO 300type comment <-問題あり text comment <-問題なし 266type 3800 UP 266type 4200 NO 26type comment <-問題なし 2nd item 200type 9600 UP 200type 10000 NO ****テキストデータ ここまで**** ****プログラム "chk.rb"**** #!/usr/local/bin/ruby item = '' while gets case $_ when / \d{4,6} / num = $&.strip type = $`.strip print item,"|",type,"|",num,"\n" next when /^\w/ item = $_.strip print "get item name = ",item,"\n" <-デバッグのため next end end ****プログラム ここまで**** ****実行結果**** > cat chk.txt | chk.rb get item name = 1st item 1st item|300type|2300 1st item|300type|3100 get item name = 266type 3800 UP 266type 3800 UP|266type|4200 get item name = 2nd item 2nd item|200type|9600 2nd item|200type|10000 ****実行結果 ここまで****