我有以下字符串:“@ [1484987415095898:274:Page Four]”并且我想捕获名称,所以我写了以下regexp
@\[[\d]+:[\d]+:(.*)]
它似乎有效,但现在我正在努力了解如何用捕获组1替换前一个字符串
即
“Lorem ipsum @ [1484987415095898:274:Page Four] dolores” - >
“Lorem ipsum Page Four dolores”
注意,我看到了如何使用this stack question取出捕获组 但是,如何找到从中提取的原始字符串并替换它?
答案 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