import Foundation
let pattern = #"https://www\.roco\.cc/rde/(produkte/([A-z]*)|home-neuheiten)/([A-z]*)/*([0-9]{5,})-([A-z]*)-(?P<baureihe>el|e|cc|litra-eb|s|br|tkt|rh)*(?P<number>[e%0-9\-]*)-([a-z\-]*).html"#
let regex = try! NSRegularExpression(pattern: pattern)
let testString = #"""
https://www.roco.cc/rde/produkte/lokomotiven/dampflokomotiven/52208-dampflokomotive-br-80-db.html
https://www.roco.cc/rde/produkte/lokomotiven/dampflokomotiven/36086-dampflokomotive-44-0104-8-dr.html
https://www.roco.cc/rde/produkte/lokomotiven/dampflokomotiven/70038-dampflokomotive-56-2009-1-dr.html
https://www.roco.cc/rde/produkte/lokomotiven/dampflokomotiven/70040-dampflokomotive-231-e-34-sncf.html
https://www.roco.cc/rde/produkte/lokomotiven/dampflokomotiven/7110002-dampflokomotive-tkt-21-pkp.html
https://www.roco.cc/rde/produkte/lokomotiven/dampflokomotiven/70047-dampflokomotive-521591-obb.html
https://www.roco.cc/rde/produkte/lokomotiven/dampflokomotiven/70046-dampflokomotive-br-8970%e2%80%9375-dr.html
https://www.roco.cc/rde/produkte/lokomotiven/dampflokomotiven/73030-dampflokomotive-rh-86-obb.html
https://www.roco.cc/rde/produkte/lokomotiven/elektrolokomotiven/60226-elektrolokomotive-rh-372-cd-cargo.html
https://www.roco.cc/rde/produkte/lokomotiven/elektrolokomotiven/60239-elektrolokomotive-s-4992002-csd.html
https://www.roco.cc/rde/produkte/lokomotiven/elektrolokomotiven/60974-elektrolokomotive-193-759-8-ns.html
https://www.roco.cc/rde/produkte/lokomotiven/elektrolokomotiven/60492-elektrolokomotive-1116-182-7-bundesheer-obb.html
https://www.roco.cc/rde/produkte/lokomotiven/elektrolokomotiven/60921-elektrolokomotive-litra-eb-3202-dsb.html
https://www.roco.cc/rde/produkte/lokomotiven/elektrolokomotiven/70618-elektrolokomotive-cc-6574-sncf.html
https://www.roco.cc/rde/produkte/lokomotiven/elektrolokomotiven/70653-elektrolokomotive-e-186-012-ns.html
https://www.roco.cc/rde/home-neuheiten/70673-elektrolokomotive-el-18-2260-go-ahead.html
"""#
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