【发布时间】:2017-03-10 23:27:26
【问题描述】:
我试图通过这个 sn-p 代码 (Swift 3.0) 将 hello_world 更改为 helloWorld:
import Foundation
let oldLine = "hello_world"
let fullRange = NSRange(location: 0, length: oldLine.characters.count)
let newLine = NSMutableString(string: oldLine)
let regex = try! NSRegularExpression(pattern: "(_)(\\w)", options: [])
regex.replaceMatches(in: newLine, options: [], range: fullRange,
withTemplate: "\\L$2")
结果是newLine = "helloLworld"
我使用"\\L$2" 作为模板,因为我看到了这个答案:https://stackoverflow.com/a/20742304/5282792 说\L$2 是替换模板中第二组大写的模式。但它在NSRegularExpression 中不起作用。
那么我可以用NSRegularExpression 中的替换模板模式替换一个大写的字符串吗?
【问题讨论】:
-
SublimeText 使用支持
\L运算符的 Boost 正则表达式。 Swift 使用 ICU,不支持大小写运算符。 -
@WiktorStribiżew 所以
NSRegularExpression在替换模板中只支持$num? -
反斜杠也是 ICU 正则表达式替换模式中的特殊字符,请参阅 ICU User Guide: Replacement Text。
-
您是否打算为此使用正则表达式?我可以使用
String上的方法为您提供一些代码,这些代码可以很好地满足您的需求。