Trim 小数点前后全为零正则表达式

Trim all zeros before and after decimal Regex

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+)。但这对我想要实现的目标没有帮助。我将 NSString 与 RegularExpressionSearch 一起使用,如下所示:

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

如有任何帮助,我们将不胜感激。

是这样的吗?

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

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

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

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

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

  3. @\.0$ - 删除尾随的“.0”。前两个 RE 可能会故意给你留下“.0”,这样你就可以在这一步中删除点。

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

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

HTH