2017-08-07 77 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