[SCALA] 정규식 사용주는 문자열에서 양을 얻을 [중복]
SCALA정규식 사용주는 문자열에서 양을 얻을 [중복]
나는이 문자열을 가지고 그래서 :
val value = "\nValue is €2,927"
어떻게 내가 어떤 통화의이 금액 2927을, 구문 분석, 더블 /를 INT로 변환 할 수 있습니까?
이것은 내가하려고 한 것입니다 :
println(value.replaceAll("d{5}", ""))
편집하다:
€ 어떤 통화 표시 될 수 있습니다.
해결법
-
==============================
1.이 질문에 확실한 대답하지 않을 수 있습니다 (I는 스칼라 코더 아니에요)하지만 난 다른 답변과 의견과 함께 유용 어쨌든이 될 것 같아요.
이 질문에 확실한 대답하지 않을 수 있습니다 (I는 스칼라 코더 아니에요)하지만 난 다른 답변과 의견과 함께 유용 어쨌든이 될 것 같아요.
당신은 저를 다른 숫자를 무시하고, 단지 통화 금액을 확인하는 정규식을 만드는 방법에 대해 생각했다. 이것은 내가 생각 해낸 것입니다 :
([$£€¥₹])?(\d{1,3}(?:[, ]?\d{1,3})?(?:.\d+)?)(?(1)|(kr\.?|Kč))
이 예제 핸들 금액은 달러 표지판에 고정 사전 $, GB는 £ 파운드, 유로 €, 일본 엔 (또는 중국의 위안 인민폐 (?)) ¥ 또는 인도 루피 ₹.
또한 후 고정 통화 "기호"로 통화를 처리합니다. 예에서 스웨덴어 / 덴마크어 / 노르웨이어 크로네 (kr)를 체코 코 루나 Kč.
양은 항상 2. 접두사 통화 기호가 1 군에 캡처 그룹에서 캡처 및 그룹 3에라는 접미어입니다 (나는 생각 - 당신이 통화를 모르는 경우 양이 무슨 소용입니다.)
이 텍스트를 처리, regex101에 여기를 참조하십시오
이 옵션 통화 기호를 일치시켜 시작한다. 그런 다음 ###, ##, ###, ##, ###, ###. ###의 같은 포맷 할 수있는 금액을 정합. 초기 통화 기호가 일치하는 경우, 그것은 아무것도 일치하지 않습니다 - - 그것은 정규식 조건을 사용 후> 다. 이 일치하지 않은 경우, 포스트 고정 통화 유형 테스트합니다.
(여기에 엉덩이에서 촬영 - 어떤 일이든 어떤 스칼라 경험, 단지 "Google 직원") 코드 :
val value = "\nValue is €2,927" val pattern = "([$£€¥₹])?(\\d{1,3}(?:[, ]?\\d{1,3})?(?:.\\d+)?)(?(1)|(kr\\.?|Kč))".r val pattern(c1, amnt, c2) = value // remove spaces and thousands-separators from the value val str = amnt.replaceAll("[ ,]", "") // convert it to an integer and/or double. val i = str.toInt val d = str.toDouble
편집하다
와! 이 힘들어이었다. 지금은 자바 정규식 경우 - 다른 구조를 지원하지 않는 것을 배웠다. 그래서 여기에 대한 대안은 조금 더 다른 복잡입니다 :
(?=[$£€¥₹])(.)(\d{1,3}(?:,\d{3})?(?:\.\\d+)?)|(\d{1,3}(?:,\d{3})?(?:\.\d+)?)(kr\.?|Kč)
그것은 미리 고정 또는 후 고정 통화 기호 있는지 결정하기 위해 긍정적 인 예견을 사용합니다. 실제 양은 사전 또는 사후에 따라 두 그룹으로 분할 될를 캡쳐했다. 하나는 2 통화 그룹 1과 양으로, 또는 제 3 양 통화 4 너무.
그리고 기능 참조) 코드를 여기 ideone에서.
편집 # 2
일부 새로운 통화 및 물건 주석 이후에 추가.
(Rs.|[$£€¥₹])?\s*(\d{1,3}(?:[, ]?\d{1,3})?(?:.\d+)?)(?(1)|\s*(kr\.?|Kč|INR|€))
여기 regex101에서.
-
==============================
2.당신은 여기 내 내 대답에서 유사한 솔루션을 가질 수있다. 그래서:
당신은 여기 내 내 대답에서 유사한 솔루션을 가질 수있다. 그래서:
scala> import scala.util.matching.Regex import scala.util.matching.Regex scala> val matcher = new Regex("\\d{1,1}") matcher: scala.util.matching.Regex = \d{1,1} scala> val value = "\nValue is €2,927" value: String = " Value is €2,927" scala> matcher.findAllMatchIn(value).toList.mkString.toInt res1: Int = 2927
편집 : 복식을 수용해야 ...
scala> val value = "\nValue is €2,927.545" value: String = " Value is €2,927.545" scala> val matcher = new Regex("\\d{1,3}[\\.\\,\\ ]?[0-9]$*") matcher: scala.util.matching.Regex = \d{1,3}[\.\,\ ]?[0-9]$* scala> matcher.findAllMatchIn(value).toList.mkString.replaceAll("[ ,]", "").toDouble res7: Double = 2927.545
그리고 공간에 대한 ...
scala> val value = "\nValue is €2 927, 927.545" value: String = " Value is €2 927, 927.545" scala> matcher.findAllMatchIn(value).toList.mkString.replaceAll("[ ,]", "").toDouble res8: Double = 2927927.545
from https://stackoverflow.com/questions/37567406/get-amount-from-giver-string-using-regex by cc-by-sa and MIT license
'SCALA' 카테고리의 다른 글
[SCALA] 스칼라 무엇 자동 자원 관리 대안을 존재 하는가? (0) | 2019.11.13 |
---|---|
[SCALA] 스칼라 컴파일 속도 대 자바 컴파일 속도 (0) | 2019.11.13 |
[SCALA] 왜 쇼 운영자 후 불가능 가입? (0) | 2019.11.13 |
[SCALA] : 액션 구성을 구현하는 방법 (0) | 2019.11.13 |
[SCALA] 스칼라 루비 #tap 방법 상당 [중복] (0) | 2019.11.13 |