質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

2回答

203閲覧

正規表現の取り出し方

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2020/06/28 02:00

編集2020/07/10 12:58

プログラミング初心者です。正規表現でつまずいています。

 

ファイルmono.txtを読み取り、商品のなまえと、商品1個あたりの価格 を表示するプログラムをつくる。

↓mono.txt

みかん は 40個で 8000円です。 りんご は 40個で 4000円です。 なし は 30個で 6000円です。 もも は 20個で 3000円です。 ぶどう は 30個で 10000円です。 メロン は 10個で 30000円です。 ・・・

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2020/06/28 02:10

提示のコードでは、$1,$2,$3はどういう内容となるんでしょうか
退会済みユーザー

退会済みユーザー

2020/06/28 02:19

$1は名前$2は個数$3は合計の値段をキャプチャしたもの、というつもりです。 ()でくくるとそこの部分だけをキャプチャできると本に書いてあったので(.+\s)で名前のところを、(\s\d{1,2})で個数のところを、(\s\d{4,5})で合計の値段をキャプチャしようとおもっています。
otn

2020/06/28 02:26

正規表現の中にカンマが入ってますが、データには無いです。どっちが正しい?
y_waiwai

2020/06/28 02:27

実際に動かしたときはどういう値となるんでしょうか
退会済みユーザー

退会済みユーザー

2020/06/28 02:28

すいません、抜き出すときにカンマでくぎるものだと思っていました。
退会済みユーザー

退会済みユーザー

2020/06/28 02:40

すいませんできました
guest

回答2

0

ベストアンサー

・空白の入り方が不規則なので、全角空白も含め全部削除してから処理します。

・文字列を割り算は出来ないので、数値化してから割り算します。
とりあえず整数化して小数点以下切り捨てで。

・正規表現がマッチしないときの処理も必要。

Ruby

1 if /(.+)(\d+)個で(\d+)/ =~ line.gsub(/[ \s]/,"") 2 printf("%s %s円 \n", $1,$3.to_i/$2.to_i) 3 else 4 puts "フォーマットエラー: #{line}" 5 end

投稿2020/06/28 02:38

otn

総合スコア84533

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/06/28 02:40

すいません。やっていたらできました。丁寧に教えていただきありがとうございます。あなたが教えていたソースコードも参考にしたいとおもいます!本当にありがとうございました。
guest

0

r,rb

ruby

1ARGV.each do |name| 2 f = File.new(name) 3 f.each_line do |line| 4 next unless line =~ /\A(.*) は (\d+)個で (\d+)円です。\Z/ 5 6 name = Regexp.last_match(1) 7 volume = Regexp.last_match(2).to_i 8 price = Regexp.last_match(3).to_i 9 puts("#{name} #{price / volume}円") 10 end 11end

実行例
イメージ説明

商品名に ”は" が含まれている場合もテストしています。

投稿2020/06/28 05:36

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問