在Swift 3中用捕获组替换字符串

时间:2017-09-10 20:46:31

标签: regex swift

我有以下字符串:“@ [1484987415095898:274:Page Four]”并且我想捕获名称,所以我写了以下regexp @\[[\d]+:[\d]+:(.*)] 它似乎有效,但现在我正在努力了解如何用捕获组1替换前一个字符串 即
“Lorem ipsum @ [1484987415095898:274:Page Four] dolores” - >
 “Lorem ipsum Page Four dolores”

注意,我看到了如何使用this stack question取出捕获组 但是,如何找到从中提取的原始字符串并替换它?

1 个答案:

答案 0 :(得分:6)

您需要将整个匹配替换为包含第一个捕获组捕获的内容的$1替换反向引用。

此外,如果您决定稍后扩展模式,我建议将[\d]写为\d以避免对字符类联合的误解。此外,使用.*?懒惰点匹配更安全地转到第一个]而不是最后一个](如果使用.*贪婪变化)。但是,这取决于实际要求。

使用以下任一方法:

let txt = "Lorem ipsum @[1484987415095898:274:Page Four] dolores"
let regex = NSRegularExpression(pattern: "@\\[\\d+:\\d+:(.*?)\\]", options:nil, error: nil)
let newString = regex!.stringByReplacingMatchesInString(txt, options: nil, range: NSMakeRange(0, count(txt)), withTemplate: "$1")
print(newString)
// => Lorem ipsum Page Four dolores

let txt = "Lorem ipsum @[1484987415095898:274:Page Four] dolores"
let newString = txt.replacingOccurrences(of: "@\\[\\d+:\\d+:(.*?)]", with: "$1", options: .regularExpression)
print(newString)
// => Lorem ipsum Page Four dolores