import Foundation
let pattern = #"((?<=time:.).*?(?=;))|((?<=A:.).*?(?=;))|((?<=B:.\().*?(?=\)))|((?<=C:.\().*?(?=\)))|((?<=D\().*?(?=\)))|((?<=E:.\().*?(?=\)))"#
let regex = try! NSRegularExpression(pattern: pattern, options: .dotMatchesLineSeparators)
let testString = #"""
time: 2017-12-24 13:13:34 +0000; A: 61792; B: (
60328,
60344,
60344,
60344
); C: (
"-3672",
"-3656",
1547,
1578
); D(
1500,
1484,
1500,
); E: (
313,
328
)
time: 2017-12-25 13:13:35 +0000; A: 6134; B: (
628,
60374,
6044
); C: (
"-72",
"6",
157,
157
); D(
1700,
1654,
1580,
); E: (
3103,
3208
)
"""#
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