为什么正则expression式返回范围值?

我有一个stringAdd "ABC" here ,我想从这些string中提取ABC 。 为此我做:

 text.rangeOfString("(?<=\")[^\"]+", options: .RegularExpressionSearch) 

但它回报我

 Optional(Range(5..<7)) 

我怎样才能从那里提取这些文本?

你首先需要打开结果范围,然后调用substringWithRange 。 你可以通过条件绑定来做到这一点

 let text = "Add \"ABC\"" let range = text.rangeOfString("(?<=\")[^\"]+", options: .RegularExpressionSearch, range: nil, locale: nil) if let nonNilRange = range { print(text.substringWithRange(nonNilRange)) } 

您可以使用"([^"]+)"正则expression式来提取任何匹配和任何捕获的组与下面的代码:

 func regMatchGroup(regex: String, text: String) -> [[String]] { do { var resultsFinal = [[String]]() let regex = try NSRegularExpression(pattern: regex, options: []) let nsString = text as NSString let results = regex.matchesInString(text, options: [], range: NSMakeRange(0, nsString.length)) for result in results { var internalString = [String]() for var i = 0; i < result.numberOfRanges; ++i{ internalString.append(nsString.substringWithRange(result.rangeAtIndex(i))) } resultsFinal.append(internalString) } return resultsFinal } catch let error as NSError { print("invalid regex: \(error.localizedDescription)") return [[]] } } // USAGE: let string = "Add \"ABC\" \"ABD\"" let matches = regMatchGroup("\"([^\"]+)\"", text: string) if (matches.count > 0) // If we have matches.... { print(matches[0][1]) // Print the first one, Group 1. } 

请参阅SwiftStub演示

由于添加了error handling,当没有find匹配时,不应该发生崩溃。

解决scheme是:

 let regex = myText.rangeOfString("(?<=\")[^\"]+") myText.substringWithRange(regex, options: .RegularExpressionSearch)!)