在十进制正则表达式之前和之后修剪全零

时间:2016-08-08 21:07:38

标签: objective-c regex nsstring

Objective-C:我想删除所有跟踪和引导的零,但有一些例外。例如:

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+)。但这对我想要达到的目标没有帮助。我正在使用带有RegularExpressionSearch的NSString,如下所示:

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

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:2)

有时最好将任务分解,按每次@""的替换字符串顺序尝试这些:

  1. @"^0+(?!\\.)" - 0的初始序列后跟一个点。这会将“003.0”修剪为“3.0”,将“000.3”修剪为“0.3”。

  2. @"(?<!\\.)0+$" - 尾部的尾随序列,前面有一个点。所以“3.400”变为“3.4”而“3.000”变为“3.0”

  3. @\\.0$ - 删除尾随的“.0”。前两个RE可能会故意为您提供“.0” ,以便您可以在此步骤中删除该点。

  4. 这不是解决它的唯一方法,但三个基本任务是删除前导零,删除尾随零和清理。你根本不需要使用RE,一个简单的有限状态机可能是一个很好的选择。

    重要提示:以上假设字符串包含一个小数点,如果它可能不需要处理(左侧作为练习)。

    HTH

答案 1 :(得分:-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)
}))