2016-01-04 182 views
0

我有一個字符串Add "ABC" here,我想從這些字符串中提取ABC。爲此,我做的事:爲什麼Regex會返回範圍值?

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

但它返回我

Optional(Range(5..<7)) 

我如何可以提取有那些文字嗎?

+0

你想要什麼文字返回?請舉一些例子,因爲這個問題有點不清楚。 – Cristik

+0

我在我的問題中寫道。例如:我有一個文本「添加」ABC「這裏」。我想在'ABC'結尾處看到這個。所以,''「'@Cristik –

+1

裏面的文本我不明白這個問題,正如名字清楚地表明的那樣,文檔秒數方法返回一個基於參數的字符串範圍。 –

回答

0

您首先需要打開結果範圍,並致電substringWithRange。您可以通過conditional binding

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

做到這一點的解決辦法是:

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

除非我誤解,否則不會編譯。 'substringWithRange()'沒有「options」參數。 –

0

可以使用"([^"]+)"正則表達式來提取任何用下面的代碼比賽和任何捕獲組:

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 demo

由於添加了錯誤處理,沒有發現匹配時不會發生崩潰。

相關問題