2012-04-01 2 views
2

문자열에서 마지막 인도 통화 즉 R을 파싱하고 싶습니다. 예를 들어루비 문자열에서 인도 통화를 구문 분석합니다.

:이 항목에 대한

  1. 가격은 루피입니다. 100 -> 100
  2. 이 항목의 가격은 개 Rs. 100 ~ Rs. 120 -> 120
  3. 이 항목의 가격은 개 rs. 100.2에서 Rs. 125.4 -> 125.4
  4. 이 항목의 가격은 개 rs. 100 ~ Rs. invalid_price -> 100
  5. 이 항목의 가격은 개 rs. 100 ~ 125 -> 100, 125가 아닌 125 원인 125는 R을가집니다. 그것 앞에.

Rs. 또는 Rs 모두 괜찮을 것입니다. 나는 Rs가 붙은 번호를 얻고 싶다. 또는 R

어떻게이 문자열을 구문 분석 할 수 있습니까?

+0

당신은 항상 가장 오른쪽 숫자를 원하십니까? – joelparkerhenderson

+0

나는 Money gem (https://github.com/collectiveidea/money)을 사용하도록 제안하려고했으나, 놀랍게도 R을 지원하는 것으로 보이지 않습니다. 그것은 매우 미국 중심입니다. – d11wtq

+0

@ d11wtq 문자열을 파싱하기 만하면됩니다. 왜 내가 그 보석을 필요로하는지. 게다가 돈이 보석은 통화로 문자열로 비밀리에하는 것입니다. 나는 통화로 은밀하고 싶지 않다. 질문을 다시 확인하십시오. –

답변

5

목표의 오른쪽 occurance 얻을 수 있습니다 : "."

  • 텍스트 "루피"
  • 옵션 약자 기간을
  • 공백
  • 숫자와 선택적 소수점 및 더 많은 숫자

솔루션 :

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

나는

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

scan 방법은 (때문에 \d+의) 모든 일치하는 번호를 포함하는 배열을 반환 같은 것을 사용합니다. 그리고 당신은 항상 마지막으로 찾을 수 번호 (문장 4) 당신이 실제로 원하는 배열의 마지막 요소.

이렇게하면 플로트가있는 케이스 # 3이 허용됩니다.

+0

대소 문자를 확인하십시오 # 5 –

+0

5 번만 잘 해석합니다. – Ekampp

+0

Joelparkhenderson의 해결책은 통화의 "R"부분을 고려하므로보다 우아합니다. – Ekampp

관련 문제