为什么Regex返回Range值



我有一个字符串Add "ABC" here,我想从这些字符串中提取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))
}

您可以使用"([^"]+)"正则表达式提取任何匹配项和任何捕获的组,代码如下:

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演示

由于添加了错误处理,当找不到匹配项时,不应发生崩溃。

解决方案是:

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

最新更新