我有一个字符串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)!)