import Foundation
let pattern = ##"""
(?x) # Free spacing mode, to allow comment and better view
# Matching the first line `i5-2520M`
([^ ]+\s*)(?=CPU\s*@)
# Matching the first line `2.50GHz`
|(?<=CPU)(\s*@\s*\d+.\d+GHz)
# Matching the second line `CPU T2400`
|(CPU\s*[^ ]+\s*)(?=@)
# Matching the second line `1.83GHz`
|\s*(?<=@)(\s*\d+.\d+GHz)
"""##
let regex = try! NSRegularExpression(pattern: pattern, options: .anchorsMatchLines)
let testString = #"""
Intel(R) Core(TM) i5-2520M CPU @ 2.50GHz
Genuine Intel(R) CPU T2400 @ 1.83GHz
"""#
let stringRange = NSRange(location: 0, length: testString.utf16.count)
let matches = regex.matches(in: testString, range: stringRange)
var result: [[String]] = []
for match in matches {
var groups: [String] = []
for rangeIndex in 1 ..< match.numberOfRanges {
let nsRange = match.range(at: rangeIndex)
guard !NSEqualRanges(nsRange, NSMakeRange(NSNotFound, 0)) else { continue }
let string = (testString as NSString).substring(with: nsRange)
groups.append(string)
}
if !groups.isEmpty {
result.append(groups)
}
}
print(result)
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Swift 5.2, please visit: https://developer.apple.com/documentation/foundation/nsregularexpression