- ベストアンサー
数字(小数点付き)の取り出し方
お世話になります。 次のような文字列から「81.59」を数字として取り出したいのですが Perlを始めたばかりで途方に暮れています。 <td bgcolor="#c7c7c7">81.59円</td> 上記から81.59を数字として取り出す方法を教えて頂けませんでしょうか。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
No2です。 (1)についてですが、 カンマが一つという決まりがあるのであれば 以下の正規表現で取れます ([+|-]?\d+,?\d+.\d+) ただし、抜き取っても「,」が入ってしまうため、 文字列になってしまいます。その後の計算ができません。 ちょっと考え方を変えて、 「>"何らかの文字列"円」で正規表現を書き、 その後で、数値として認識できるように「,」を取り除いてみてはいかがでしょうか 以下のような感じになるかなと思います。 while( my $line = <$file_handle> ){ if( $line =~ />(.*)円/ ){ $result = $1; $result =~ s/,//g; #,を取り除きます。 } } (2)についてですが my ( $year, $month, $day, $hour, $min ); if( $line =~ /(¥d+)年(¥d+)月(¥d+)日 (¥d+):(¥d+)/ ){ $year = $1; $month = $2; $day = $3; $hour = $4; $min = $5; } で各値を取得できると思います。
その他の回答 (2)
- diszo
- ベストアンサー率78% (32/41)
No.1さんのおっしゃるとおりでできると思いますが、 正規表現で抜き出すのが簡単かと思われます。 簡単にサンプルを書きます #!/usr/bin/perl use strict; use warnings; #<HTML> #<BODY> #<table> #<tr> #<td bgcolor="#c7c7c7">81.59円</td> #</tr> #</table> #</BODY> #</HTML> #↑のようなファイルを読み込むと想定 my $result; #81.59が入る予定 my $file_handle; open $file_handle, "<", "./test.txt" || die "Cannot Open File!!"; while( my $line = <$file_handle> ){ if( $line =~ /(\d+\.\d+)/ ){ $result = $1; } } close $file_handle; print $result."\n"; タブを全角スペースにしていますので、 変換してください。 これで抜き出した81.59は、特に意識せずに数値として扱うことができます。 なので、$result+1とかすると82.59になります。
お礼
具体的なコードを示して頂きありがとうございます。 大変助かりました。 お陰さまでNo1のアドバイスの意味がわかりました。 また、実際に確認もできました。 $result = $1で突然「$1」が出てくる辺りがperlの特徴なのでしょうが、まだこういうルールを覚えきれておらず、部分的にコードを教えて頂いても使いこなせずにおりました。 また正規表現も使いこなせておりません。 本来ならもう少し調べてからお聞きするところですがもし宜しければ次のパターンも教えて頂けませんでしょうか。 「(\d+\.\d+) にマッチ」の意味が分かりましたので、今度は正規表現だけでも理解できると思います。 (1)「+1,281.59」または「1,281.59」または「-1,281.59」 ※カンマ編集されていたり、符号が付いたりつかなかったりするケース (2)<td bgcolor="#A7A7A7"><b>更新日時 2011年12月2日 18:00現在</b></td> から年月日時分を取得(YYYY/MM/DD HH:MM) ※こちらについては年月日等を別々に抜き出して組み立てるのでしたらそうする前提の正規表現であることを明記してください。
- Tacosan
- ベストアンサー率23% (3656/15482)
(\d+\.\d+) にマッチさせれば出てくるよね.
お礼
ご回答ありがとうございます。 せっかく教えて頂きましたが、もう少し具体的に教えて頂けませんでしょうか。 perlは変数の扱いが高級すぎてもう何が何だか分からない状況です。
お礼
ありがとうございます。 大変助かりました。 お陰さまでやりたいことが実現できました。