我有一個字符串Add "ABC" here
,我想從這些字符串中提取ABC
。爲此,我做的事:爲什麼Regex會返回範圍值?
text.rangeOfString("(?<=\")[^\"]+", options: .RegularExpressionSearch)
但它返回我
Optional(Range(5..<7))
我如何可以提取有那些文字嗎?
我有一個字符串Add "ABC" here
,我想從這些字符串中提取ABC
。爲此,我做的事:爲什麼Regex會返回範圍值?
text.rangeOfString("(?<=\")[^\"]+", options: .RegularExpressionSearch)
但它返回我
Optional(Range(5..<7))
我如何可以提取有那些文字嗎?
您首先需要打開結果範圍,並致電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))
}
做到這一點的解決辦法是:
let regex = myText.rangeOfString("(?<=\")[^\"]+")
myText.substringWithRange(regex, options: .RegularExpressionSearch)!)
除非我誤解,否則不會編譯。 'substringWithRange()'沒有「options」參數。 –
可以使用"([^"]+)"
正則表達式來提取任何用下面的代碼比賽和任何捕獲組:
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.
}
由於添加了錯誤處理,沒有發現匹配時不會發生崩潰。
你想要什麼文字返回?請舉一些例子,因爲這個問題有點不清楚。 – Cristik
我在我的問題中寫道。例如:我有一個文本「添加」ABC「這裏」。我想在'ABC'結尾處看到這個。所以,''「'@Cristik –
裏面的文本我不明白這個問題,正如名字清楚地表明的那樣,文檔秒數方法返回一個基於參數的字符串範圍。 –