2016-08-08 6 views
1

Objective-C : 일부 예외 사항을 제외하고 흔적을 남기고 0을 제거하고 싶습니다. 예를 들어 내가 뭘하려10 진수 전후에 모두 0을 다듬습니다. Regex

0.05000 -> 0.05 
000.2300 -> 0.23 
005.0 -> 5 
500.0 -> 500 
60.0000 -> 60 
56.200000 -> 56.2 
56.04000 -> 56.04 

[.0]+$|(^0+) 같은 것입니다. 그러나 그것은 내가 성취하려는 것을 돕지 못합니다.

NSString *cleaned = [someString stringByReplacingOccurrencesOfString:@"[.0]+$|(^0+)" 
                      withString:@"" 
                       options:NSRegularExpressionSearch 
                       range:NSMakeRange(0, self.doseTextField.text.length)]; 

어떤 도움을 주시면 감사하겠습니다 다음과 같이 나는 RegularExpressionSearch에있는 NSString을 사용하고 있습니다.

+0

'500'은 어떨까요? 아니면 -1000? '.50'? 선행/후행 0을 고려하고 싶습니까? –

+2

정규식을 사용해야하는 이유는 무엇입니까? 그냥 문자열을 숫자로 변환하고 다시 문자열로 변환 하시겠습니까? – rmaddy

+1

또는 \ [. (0) + (? \\.) |^0 + (? = [1-9]) | \\. 0 + $ | + $ "'] (https://regex101.com/r/xN8dN6/1)을 사용하여'$ 1 $ 2 '로 대체하십시오. 또는 그룹화 된 것 : [(":(0) + (? = \\.) | 0 + (? = [1-9])) | (\\. \\ d *?) 0 +) $ "'] (https://regex101.com/r/xN8dN6/2) –

답변

2

이 때로는 작업을 중단하는 것이 가장 좋습니다, @""의 대체 문자열 순서마다 다음을 수행하십시오

  1. @"^0+(?!\\.)"를 - 뒤에 도트 0의 하지의 초기 순서를 . 이것은 "003.0"을 "3.0"으로, "000.3"을 "0.3"으로 조정합니다.

  2. @"(?<!\\.)0+$" - 0의 후행 시퀀스 앞에 점을 붙입니다. 그래서 "3.400"은 "3.4"로 가고 "3.000"은 "3.0"으로갑니다.

  3. @\\.0$ - 뒤에 ".0"을 제거하십시오. 처음 두 RE는 "0 .0 "을 남겨두고이 단계에서 점을 제거 할 수 있도록에 남겨 둘 수 있습니다.

세 가지 기본 작업은 앞에 오는 0을 제거하고 후행 0을 제거하고 정리하는 것입니다. 또한 RE를 전혀 사용할 필요가 없으며 간단한 유한 상태 시스템이 적합 할 수 있습니다.

중요 : 위의 내용은 문자열에 소수점이 포함된다고 가정합니다. 그럴 경우 핸들도 필요하지 않을 수 있습니다 (연습으로 남겨 두었습니다).

HTH

+1

문제를 이해할 수 있고 테스트 할 수있는 부분으로 나눌 수있는 좋은 제안 - 6 개월 전부터 지금까지 이런 일이 크게 감사합니다! –

+0

이것이 좋은 연습 인 것처럼 보이기 때문에, 지금은 한 줄 정규식에 대한 Wiktor의 대답으로 가고 있습니다. 즉, "^ (0) + (? = \\.) |^0 + (? = [1-9]) | \\. 0 + $ | (\\. \\ d *?) 0+ $ "를 $ 1 $ 2로 대체하십시오. 또는 그룹화 된 것 :''(? :(0) + (? = \\.) | 0 + (? = [1-9])) | (\\. 0+ | \ d *?) 0 +) $ "' – Harsh

-1

이와 비슷한?

let numberStrings = [ 
    "0.05000", 
    "000.2300", 
    "005.0", 
    "500.0", 
    "60.0000", 
    "56.200000", 
    "56.04000" 
] 

print(numberStrings.map({ 
    String(Double($0)!).stringByReplacingOccurrencesOfString("\\.0*$", withString: "", options: .RegularExpressionSearch, range: nil) 
})) 
+0

음 ... downvoted 때문에? –