import Foundation
let pattern = #" +(?=[^[\]]*\])"#
let regex = try! NSRegularExpression(pattern: pattern, options: .anchorsMatchLines)
let testString = #"0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 [-0.01357987 0.99989218 -0.00558794] [ 0.50810066 0.81535196 -0.27755161] -18017079.1047535 10307726.258588774 -23524317.110919423 22838.17515528947 36648.54674929567 -12475.426190771163 20757272.462656207 5 5 0.005 0 5 2 0.0005 3 -98.28031520537542 29.516134353642414 19998.73252382984 -0.0055879708379507065 -0.06085533474930652 359.2218946628823 818.306543386653 2.7826806154507513 8.100054108045068 -0.7584403000503389 -0.02994106840115437 -0.0628111825224635 0.058338781314879004 242.42818865783832 0.0 0.8063781178568004 -2.6036838124274486 0.0 -0.734866228020307 -0.062 -0.062 0.008726849073962957 0.0 123.16666557966661 1.2292998660484957e-09 0.0 0.0 25619.0 Allies [-0.06088792 0.00475117 0.9981333 ] 0.5064766089927465 0.3371159370714128 0.6267890628740791 1.6191164404478644 -4.404605641298986 1.0085164509526248 0.9403428264947271 1.002228406356249 0.5911076156375097 0.04943091153402836 -0.12347543075231103 -0.031096345163790243 -0.1049357617938111 0.024866980145114622 0.04861966645392242"#
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