我在字符串中有一个正则表达式搜索方法:
extension String {
func searchRegex (regex: String) -> Array<String> {
do {
let regex = try NSRegularExpression(pattern: regex, options: NSRegularExpressionOptions(rawValue: 0))
let nsstr = self as NSString
let all = NSRange(location: 0, length: nsstr.length)
var matches : Array<String> = Array<String>()
regex.enumerateMatchesInString(self, options: NSMatchingOptions(rawValue: 0), range: all) {
(result : NSTextCheckingResult?, _, _) in
let theResult = nsstr.substringWithRange(result!.range)
matches.append(theResult)
}
return matches
} catch {
return Array<String>()
}
}
}
效果很好。但如果我有一个正则表达式product_title:\['(.*)'
它返回我product_title:[\'Some title bla bla\'
但我只需要这部分(.*)
.
我是 swift 的新手,但在 python 中这个问题通过使用解决了groups()
功能。如何在 swift 中使用捕获组。请举个例子。
NSTextCheckingResult
has a numberOfRanges
财产和rangeAtIndex()
方法,让您可以获取各个捕获组的范围。因此,如果您想要第一个捕获组而不是整个匹配的字符串,您可以将代码修改为:
var matches : Array<String> = Array<String>()
regex.enumerateMatchesInString(self, options: NSMatchingOptions(rawValue: 0), range: all) {(result : NSTextCheckingResult?, _, _) in
let capturedRange = result!.rangeAtIndex(1)
if !NSEqualRanges(capturedRange, NSMakeRange(NSNotFound, 0)) {
let theResult = nsstr.substringWithRange(result!.rangeAtIndex(1))
matches.append(theResult)
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)