import Foundation
let pattern = #"1-0:16\.7\.0\*255":(-?\d+\.?\d+)|1-0:2\.8\.0\*255\":(-?\d+\.?\d+)|1-0:1\.8\.0\*255\":(-?\d+\.?\d+)"#
let regex = try! NSRegularExpression(pattern: pattern, options: .anchorsMatchLines)
let testString = #"{"meterId":"1KFM0000028196","deviceId":"EBSD1425009486","msgType":"EMETER_OBIS_V2","measurements":[{"timestamp":"2023-04-02T11:32:33Z","values":{"1-0:96.90.2*1":"7E2005D2","1-0:0.2.0*0":"312E3033","1-0:14.7.0*255":49.900001525878906,"1-0:81.7.26*255":52,"1-0:81.7.15*255":331,"1-0:81.7.4*255":188,"1-0:81.7.2*255":239,"1-0:81.7.1*255":117,"1-0:71.7.0*255":1.1100000143051147,"1-0:51.7.0*255":0.73000001907348633,"1-0:31.7.0*255":1.8999999761581421,"1-0:72.7.0*255":235.5,"1-0:52.7.0*255":233.80000305175781,"1-0:32.7.0*255":235.89999389648438,"1-0:16.7.0*255":-152,"1-0:2.8.0*255":0.52590000629425049,"1-0:1.8.0*255":10474.70703125,"1-0:96.1.0*255":"0A014B464D0000006E24","1-0:96.50.1*1":"4B464D"}}]}"#
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