2012-04-01 12 views
2

Ich möchte letzte indische Währung dh Rs aus einer Zeichenfolge analysieren.Parse indische Währung von String in Ruby

Zum Beispiel:

  1. Preis für diesen Artikel ist Rs. 100 -> 100
  2. Preis für diesen Artikel ist Rs. 100 bis Rs. 120 -> 120
  3. Preis für diesen Artikel ist Rs. 100,2 bis Rs. 125.4 -> 125.4
  4. Preis für diesen Artikel ist Rs. 100 bis Rs. invalid_price -> 100
  5. Preis für diesen Artikel ist Rs. 100 bis 125 -> 100, nicht 125 Ursache 125 hat Rs. vor.

Rs. oder Rs beides wird gut. Ich möchte eine Nummer mit Rs bekommen. oder Rs

Wie kann ich diese Zeichenfolge analysieren.

+0

Wollen Sie immer die am weitesten rechts stehende Nummer? – joelparkerhenderson

+0

Ich wollte vorschlagen, das Geld-Juwel (https://github.com/collectideidea/money) zu verwenden, aber es scheint zu meiner Überraschung keine Rs zu unterstützen. Es ist sehr US-zentriert. – d11wtq

+0

@ d11wtq Ich suche nur nach einer Zeichenfolge zu analysieren. Warum ich ein Juwel davon brauche. Darüber hinaus ist Geld Juwel in Währung zu konvertieren. Ich möchte nicht in Währung umwandeln. Überprüfen Sie die Frage erneut. –

Antwort

5

Ziel ist die am weitesten rechts liegenden Vorkommen von: ""

  • der Text "Rs"
  • Optional Abkürzung Zeitraum
  • Ein Raum
  • Ziffern und optional ein Komma und mehr Ziffern

Lösung:

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

Dies ist Problem wie: s = "Preis für diesen Artikel ist Rs. 100.2 bis 125.4" wird 125.4 zurückgeben, aber in diesem Fall möchte ich 100.2 –

+0

@MohitJain Nicht gemäß Ihrem Beispiel oben. _Preis für diesen Artikel ist Rs. 100,2 bis Rs. 125.4 -> 125.4_ –

+0

Ihre Frage besagt, dass "Preis für diesen Artikel Rs. 100.2 bis 125.4" -> 125.4 (oder können Sie mehr über das, was Sie wollen erklären?) – joelparkerhenderson

1

I würde wie

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

scan Die Methode gibt einen Array mit allen angepassten Zahlen (wegen der \d+) verwenden. Und Seite wollen Sie immer die letzte gefundene echte Nummer (Anweisung vier) Sie wollen in der Tat das letzte Element im Array.

Dies ermöglicht auch Fall Nr. 3, wo Sie Floats haben.

+0

Bitte überprüfen Sie Fall Nr. 5 –

+0

Nummer 5 analysiert gut :) – Ekampp

+0

Joelparkhenderson Lösung ist eleganter, da es die "Rs" Teil der Währung berücksichtigt. – Ekampp