【发布时间】:2015-09-22 07:02:09
【问题描述】:
我想快速将大写字符串(UPPERCASE)转换为标题大小写字符串(Title Case)。我不擅长正则表达式,但发现this 用我尝试使用的正则表达式回答。
搜索表达式为:
"([A-Z])([A-Z]+)\b"
模板表达式为:
"$1\L$2"
为了快速使用它,我已经转义了反斜杠,如下所示:
var uppercase = "UPPER CASE STRING"
var titlecase = uppercase.stringByReplacingOccurrencesOfString("([A-Z])([A-Z]+)\\b", withString: "$1\\L$2", options: NSStringCompareOptions.RegularExpressionSearch, range: Range<String.Index>(start: uppercase.startIndex, end: uppercase.endIndex))
上面的代码给出以下结果:
"ULPPER CLASE SLTRING"
从中可以看出搜索表达式成功找到了$1和$2这两个部分,但是看起来转义反斜杠会干扰替换。
我怎样才能得到预期的结果:
"Upper Case String"
【问题讨论】:
-
"$1$L$2"导致"U$LPPER C$LASE S$LTRING"... -
您可能想查看
NSString方法capitalizedString,它应该可以从 Swift 获得。 -
从NSRegularExpression类参考中的“表3-模板匹配格式”来看,替换模板表达式不支持
\L。 -
@MattGibson:这很优雅,你也可以直接将它与 Swift Strings 一起使用。谢谢。
-
@nhahtdh 感谢您的产品;完成。