2012-04-01 10 views
2

最後のインドの通貨、つまり文字列からのRsを解析したいと思います。例えばルーブルの文字列からインドの通貨を解析する

:このアイテムの

  1. 価格はルピーです。 100 - > 100
  2. このアイテムの価格はRsです。 100からRs。 120 - > 120
  3. この商品の価格は、 100.2〜Rs。 125.4 - > 125.4
  4. この商品の価格は、 100からRs。 invalid_price - > 100
  5. このアイテムの価格はRsです。 100から125 - > 100であり、125ではなく125である。それの前に

Rs。または両方がうまくいくでしょう。私はRsが付いた番号を取得したい。またはRs

どのようにこの文字列を解析できますか。

+0

あなたは常に右端の番号をしたいですか? – joelparkerhenderson

+0

私はMoney gem(https://github.com/collectiveidea/money)の使用を提案しようとしていましたが、Rsをサポートするようには思われません。それは非常に米国中心です。 – d11wtq

+0

@ d11wtq文字列の解析だけを探しています。なぜ私はそれの宝石が必要です。さらに、お金の宝石は文字列に通貨に隠すことです。私は通貨に隠したくありません。もう一度質問を確認してください。 –

答えて

5

ゴールの右端のoccurance取得することです: ""

  • テキスト "RS"
  • オプションの略語期間を
  • スペース
  • 数字と、必要に応じて小数点以下桁以上

ソリューション:

s = "Price for this item is Rs. 100.2 to 125.4" 
s.scan(/Rs.? (\d+\.\d+|\d+)/).last 
#=> 102.2 

s = "Price for this item is Rs. 100.2 to Rs. 125.4" 
s.scan(/Rs.? (\d+\.\d+|\d+)/).last 
#=> 125.4 
+0

これは次のような問題があります:s = "このアイテムの価格は100.2から125.4です"は125.4を返しますが、その場合は100.2を希望します –

+0

@MohitJain上記の例ではありません。この項目の_PriceはRsです。 100.2〜Rs。 125.4 - > 125.4_ –

+0

あなたの質問には、 "この商品の価格は100.2から125.4" - > 125.4です(または、あなたが何を望んでいるのか詳しく説明できますか?) – joelparkerhenderson

1

Iはscan方法

price = "Price for item is Rs. 100".scan(/(\d+\.\d+|\d+)/).flatten.last

ようなものを使用する(なぜなら\d+の)すべての一致数を含む配列を返します。そして、あなたはいつも最後に見つかった側番号(ステートメント4)実際には配列の最後の要素が必要です。

これは、浮動小数点数を持つケース#3も可能にします。

+0

大文字小文字を確認してください。#5 –

+0

数字5はちょうどいいです。 – Ekampp

+0

Joelparkhendersonのソリューションは、通貨の "Rs"部分を考慮するので、よりエレガントです。 – Ekampp