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

Yoa*_*rtz 4 regex swift

我有以下字符串:"@ [1484987415095898:274:Page Four]"并且我想要捕获名称,所以我写了以下regexp @\[[\d]+:[\d]+:(.*)] 它似乎工作,但现在我正在努力了解如何替换以前的字符串与捕获组一.

"Lorem ipsum @ [1484987415095898:274:Page Four] dolores" - >
"Lorem ipsum Page Four dolores"

注意,我看到了如何使用此堆栈问题获取捕获组, 但是,如何找到从中提取的原始字符串并替换它?

Wik*_*żew 6

您需要$1使用包含第一个捕获组捕获的内容的替换反向引号替换整个匹配项.

此外,如果您决定稍后扩展模式,我建议编写[\d]as \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
Run Code Online (Sandbox Code Playgroud)

要么

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
Run Code Online (Sandbox Code Playgroud)