import Foundation
let pattern = #"(.+)\s(бисер.*|стеклярус.*|пайетки.*)\s([A-Z]+\d{0,3}[A-Z]*[0-9 -]*)\s(\d+мм)*\s*(\d+г)\s(.+)-([А-Яа-яЁё .-]+)\s(\([А-Яа-я .]+\))"#
let regex = try! NSRegularExpression(pattern: pattern, options: .anchorsMatchLines)
let testString = #"""
Zlatka стеклярус GG24-3 10г 024-золотой (Китай)
Zlatka стеклярус GG27-3 10г 027-зеленый (Китай)
Zlatka стеклярус GG25-3 10г 025-красный (Китай)
Zlatka стеклярус GG22-3 10г 022-золотой (Китай)
Zlatka стеклярус GG28-3 10г 028-синий (Китай)
Zlatka стеклярус GG49-3 10г 049-черный (Китай)
Zlatka стеклярус GG21-3 10г 021-серебро (Китай)
Zlatka стеклярус GG10-3 10г 10-желтый (Китай)
Zlatka стеклярус GG30-3 10г 030-золотой (Китай)
Zlatka стеклярус GG08-3 10г 08-синий (Китай)
Zlatka бисер GR25-11 10г 025-красный (Китай)
Zlatka бисер GR21-11 10г 021-серебро (Китай)
Zlatka бисер GR42-11 10г 042- желтый (Китай)
Zlatka бисер GR27B-11 10г 27B-зеленый (Китай)
Zlatka бисер GR41-11 10г 041-белый (Китай)
Zlatka бисер GR28-11 10г 028-синий (Китай)
Zlatka бисер GR25-8 10г 025-красный (Китай)
Zlatka бисер GR27B-8 10г 27B-зеленый (Китай)
Zlatka бисер GR0968-8 10г 0968-лиловый (Китай)
Zlatka бисер GR0978-8 10г 0978-сиреневый (Китай)
Zlatka бисер GR153-8 10г 0153-бежевый (Китай)
Zlatka бисер GR0979-8 10г 0979-серый (Китай)
Zlatka бисер GR0028-8 10г 0028-синий (Китай)
Zlatka бисер GR046-8 10г 046-коричневый (Китай)
Zlatka бисер GR0152-8 10г 0152-кремовый (Китай)
Zlatka бисер GR0973-8 10г 0973-фисташковый (Китай)
Zlatka бисер GR0976-8 10г 0976-бирюзовый (Китай)
Zlatka бисер-рубка GC1164-10 10г 1164-салатовый (Китай)
Zlatka бисер-рубка GC253-10 10г 0253-персиковый (Китай)
Zlatka бисер-рубка GC367-10 10г 0367-розовый (Китай)
Zlatka бисер-рубка GC266-10 10г 0266-розовый (Китай)
Zlatka бисер-рубка GC-1168-10 10г 1168-синий (Китай)
Zlatka бисер-рубка GC263-10 10г 0263-сиреневый (Китай)
Zlatka бисер-рубка GC265-10 10г 0265-сиреневый (Китай)
Zlatka бисер-рубка GC362-10 10г 362- белый (Китай)
Zlatka бисер-рубка GC365-10 10г 365-голубой (Китай)
Zlatka бисер-рубка GC022-10 10г 022-золотой (Китай)
Zlatka бисер-рубка GC260-10 10г 0260-лиловый (Китай)
Zlatka бисер-рубка GC261-10 10г 0261-красный (Китай)
Zlatka бисер-рубка GC262-10 10г 0262-малиновый (Китай)
Zlatka бисер-рубка GC256-10 10г 0256-молочный (Китай)
Zlatka бисер-рубка GC278-10 10г 0278-бежевый (Китай)
Zlatka бисер-рубка GC270-10 10г 0270- бирюзовый (Китай)
Zlatka бисер-рубка GC025-10 10г 025-красный (Китай)
Zlatka бисер-рубка GC255-10 10г 0255-желтый (Китай)
Zlatka бисер-рубка GC1162-10 10г 1162-бежевый (Китай)
Zlatka бисер-рубка GC26-10 10г 026-синий (Китай)
Zlatka бисер-рубка GC379-10 10г 9379-фуксия (Китай)
Zlatka пайетки ZC 6мм 10г 37-т. синий (Китай)
Zlatka пайетки ZC 6мм 10г 04-черный (Китай)
Zlatka пайетки ZC 6мм 10г 02-золотой (Китай)
Zlatka пайетки ZC 6мм 10г 065-золотой (Китай)
Zlatka пайетки ZC 6мм 10г 11-лиловый (Китай)
Zlatka пайетки ZC 6мм 10г 018-зеленый (Китай)
Zlatka пайетки ZMF 6мм 10г 04-черный (Китай)
Zlatka пайетки ZC 6мм 10г 09-золотой (Китай)
Zlatka пайетки ZC 6мм 10г 03-красный (Китай)
Zlatka пайетки ZC 6мм 10г 011-коричневый (Китай)
Zlatka пайетки ZTR 6мм 10г 055-бежевый (Китай)
Zlatka пайетки ZMF 6мм 10г 062-коричневый (Китай)
Zlatka пайетки ZMF 6мм 10г 01-молочный (Китай)
Zlatka пайетки ZTR 6мм 10г 028-серый (Китай)
Zlatka пайетки ZMF 6мм 10г 023-зеленый (Китай)
Zlatka пайетки ZMF 6мм 10г 028-сиреневый (Китай)
Zlatka пайетки ZMF 6мм 10г 033-синий (Китай)
Zlatka пайетки ZTR 6мм 10г 062-малиновый (Китай)
Zlatka пайетки ZC 6мм 10г 024-зеленый (Китай)
Zlatka пайетки ZC 6мм 10г 022-коричневый (Китай)
Zlatka пайетки ZC 6мм 10г 026-болотный (Китай)
Zlatka пайетки ZMF 6мм 10г 034-персиковый (Китай)
Zlatka пайетки ZTR 6мм 10г 012-сиреневый (Китай)
Zlatka пайетки ZC 6мм 10г 05-сиреневый (Китай)
Zlatka пайетки ZC 6мм 10г 021-т. лиловый (Китай)
"""#
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