为什么正则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)!)