import Foundation
let pattern = #"^(?P<unit_type>CD|CG|CS)(?P<series>M1)(?P<mounting_type>MP5|MF4|MT4|MF3|MP3|MF2|MS2|MF1|M00)(?P<sep_1>/)(?P<piston>200|160|125|100|80|63|50|40|32|25|)(?P<sep_2>/)(?P<piston_rod>140|110|90|70|56|45|36|28|22|18|14)(?P<sep_3>/)(?P<stroke_length>[\d.]{4})(?P<design_principle>A)(?P<unit_series>2X)(?P<sep_4>/)(?P<pipe_port>B|R|S|F|H|P|T|U|A|E|L)(?P<position_head>4|3|2|1|)(?P<position_base>4|3|2|1|.)(?P<piston_rod_design>H|C|L)(?P<piston_rod_end>G|H|E|F|K)(?P<position_cushioning>U|D|S|K|E|N)(?P<seal_material>M|T|A|V|S)(?P<proximity_switche>W|A|E|T)(?P<piston_rod_extension>W|Y|C|F|D|)$"#
let regex = try! NSRegularExpression(pattern: pattern, options: .anchorsMatchLines)
let testString = #"""
CDM1MT4/100/56/.360A2X/B1.CGDMWW
CDM1MT4/40/22/.225A2X/B1.CGDMWW
CDM1MT4/50/36/..80A2X/B1.CHDMWW
CDM1MT4/32/18/.225A2X/B1.CGDMWW
CDM1MT4/80/45/.550A2X/B1.CGDMWW
CDM1MT4/125/90/1100A2X/B11CGDMW
CDM1MT4/25/14/.130A2X/B11CGDMW
CDM1MT4/40/22/.450A2X/B11CGDMW
CDM1MT4/63/36/.290A2X/B11CGDVW
CDM1MT4/50/28/..55A2X/B11CGDMW
CDM1MT4/100/56/.250A2X/B11CGDMW
CDM1MS2/100/70/.160A2X/B33CHDMW
CDM1MT4/50/28/.700A2X/B11CGDVW
CDM1MT4/50/36/..50A2X/B11CGDMW
CDM1MT4/50/28/.700A2X/B11CGDVW
CDM1MT4/40/28/.480A2X/B11CGDVW
CSM1MT4/63/45/1000A2X/B22CGUMTCXV250
CDM1MF1/100/56/..80A2X/B11CGDMWW
CDM1MT4/25/18/.320A2X/B11CGDMWW
CDM1MT4/40/28/.200A2X/B11CHDMWW
CDM1MT4/40/22/..90A2X/B11CGDMWW
CDM1MT4/25/14/..70A2X/B11CGDMWW
CDM1MF3/32/22/.360A2X/B11CGDMWW
CYM1MF1/32/22/.300A20/B11CXDMS37796
"""#
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