这是一个非常棒的问题,可惜现在在Swift中做起来不太容易(总有一天会变得容易,但今天不行)。
我有点讨厌这段代码,但我将要坐20个小时的飞机,没有时间让它更加美观。这至少可以让你开始使用
NSMutableString
。能够使用
String
就更好了,但是Swift不喜欢正则表达式,所以这有点丑陋,但至少是一个开始。
import Foundation
let input = "Hello, World ... I 'm a newbie iOS Developer."
let adjustments = [
(pattern: "\\s*(\\.\\.\\.|\\.|,)\\s*", replacement: "$1 "),
(pattern: "\\s*'\\s*", replacement: "'"),
(pattern: "^\\s+|\\s+$", replacement: ""),
]
let mutableString = NSMutableString(string: input)
for (pattern, replacement) in adjustments {
let re = try! NSRegularExpression(pattern: pattern)
re.replaceMatches(in: mutableString,
options: [],
range: NSRange(location: 0, length: mutableString.length),
withTemplate: replacement)
}
mutableString
当你第一次遇到正则表达式时,可能会感到非常困惑。以下是一些阅读提示:
请注意,我在同一个正则表达式中检查了“...”和“.”。你必须这样做,否则“.”在“...”内部会匹配三次。另一种方法是先用“…”(Mac上按Opt-;键输入的单个省略号字符)替换“...”。然后,“…”就是一个单字符的标点符号。(您也可以决定在处理结束时重新将所有省略号展开为点点点。)
在真实生活中,我可能会像这样完成和交付工作,但尝试逐个字符地构建此字符状态机并跟踪当前状态可能值得一试。