正则表达式捕获组迅速
我在字符串中有一个正则表达式搜索方法:
extension String { func searchRegex (regex: String) -> Array { 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 = Array() 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() } } }
它运作良好。 但是,如果我有一个正则表达式product_title:\['(.*)'
它返回我product_title:[\'Some title bla bla\'
但我只需要部分(.*)
。
我是swift的新手,但在python中这个问题通过使用groups()
函数解决了。 如何在swift中使用捕获组。 请举个例子。
NSTextCheckingResult
具有numberOfRanges
属性和rangeAtIndex()
方法,可让您获取各个捕获组的范围。 因此,如果您想要第一个捕获组而不是整个匹配的字符串,则可以将代码修改为:
var matches : Array = Array () 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) } }