2017-08-07 57 views
1
其次

我有以下字符串:「HelloMy的名字是鮑勃」斯威夫特正則表達式:替代小寫由大寫

我想改變它,這樣任何一個小寫後跟一個大寫字母,前面得到一個週期它是這樣的:「你好,我的名字是鮑勃」。

目前,我有這樣的:

var text = "HelloMy name is Bob" 
let regex = try! NSRegularExpression(pattern: "[a-z][A-Z]") 
text = regex.stringByReplacingMatches(in: text, options: [], range: NSMakeRange(0, text.characters.count-1), withTemplate: "What do I put here?") 

不過,我不知道要放什麼東西在替換模式。謝謝你的幫助。

回答

2

好像是用捕獲的一個簡單的例子,你可能會發現很多文章吧:

var text = "HelloMy name is Bob" 
let regex = try! NSRegularExpression(pattern: "([a-z])([A-Z])") //<-Use capturing, `([a-z])`->$1, `([A-Z])`->$2 
text = regex.stringByReplacingMatches(in: text, range: NSRange(0..<text.utf16.count), 
    withTemplate: "$1. $2") //<- Use `$1`, `$2`... as reference to capture groups 
print(text) //->Hello. My name is Bob 

順便說一句,NSMakeRange(0, text.characters.count-1)是不是NSRegularExpression使用的有效範圍。 NSRegularExpression使用基於UTF-16的位置和偏移量。並且爲了表示整個範圍,不需要-1。如上所述使用NSMakeRange(0, text.utf16.count)NSRange(0..<text.utf16.count)

+0

這隻適用於括號()放在正則表達式中的每個字符周圍。你能解釋一下這些括號是什麼嗎? –

+1

在通常的正則表達式中,未修改的簡單括號對代表捕獲組。每個捕獲組都保存匹配的子字符串,您可以分別使用引用捕獲組作爲「$ 1」,「$ 2」...。你可以找到很多搜索「正則表達式捕獲組」的文章。 – OOPer