import Foundation
let pattern = #".* \w+ (?=\()|(\(\d{4}_\d{2}_\d{2}\s\d{2}_\d{2}_\d{2}\s\w{3}\))"#
let regex = try! NSRegularExpression(pattern: pattern)
let testString = #"""
Acacia tree 2 (2014_10_06 13_06_05 UTC) (2015_12_03 14_18_17 UTC).jpg
Acacia tree 2 (2015_12_03 14_18_17 UTC).jpg
JOURNEY TO ARABIA (2014_10_06 13_06_05 UTC) (2015_12_03 14_18_17 UTC).png
Acacia Tree 4 (2014_10_15 02_10_34 UTC) (2015_12_03 14_18_17 UTC).jpg
D:\Kmna\Desktop\FACE-PICTS\RAW MATERIALS\AFRICA THE MOTHER OF US ALL 3 (2015_12_03 14_18_17 UTC).png
D:\Kmna\Desktop\FACE-PICTS\RAW MATERIALS\AFRICAN MAN + CROCODILE (2014_10_06 13_06_05 UTC) (2015_12_03 14_18_17 UTC).png
D:\Kmna\Desktop\FACE-PICTS\RAW MATERIALS\AFRICAN MAN + CROCODILE (2014_10_15 02_10_34 UTC) (2015_12_03 14_18_17 UTC).png
D:\Kmna\Desktop\FACE-PICTS\RAW MATERIALS\AFRICAN MAN + CROCODILE (2015_12_03 14_18_17 UTC).png
D:\Kmna\Desktop\FACE-PICTS\RAW MATERIALS\African muslim with favorite slave (2014_10_06 13_06_05 UTC) (2015_12_03 14_18_17 UTC).png
D:\Kmna\Desktop\FACE-PICTS\RAW MATERIALS\African muslim with favorite slave (2014_10_15 02_10_34 UTC) (2015_12_03 14_18_17 UTC).png
D:\Kmna\Desktop\FACE-PICTS\RAW MATERIALS\African muslim with favorite slave (2015_12_03 14_18_17 UTC).png
D:\Kmna\Desktop\FACE-PICTS\RAW MATERIALS\amagufwa ya bene Rwanda (2014_10_06 13_06_05 UTC) (2015_12_03 14_18_17 UTC).jpg
D:\Kmna\Desktop\FACE-PICTS\RAW MATERIALS\amagufwa ya bene Rwanda (2014_10_15 02_10_34 UTC) (2015_12_03 14_18_17 UTC).jpg
D:\Kmna\Desktop\FACE-PICTS\RAW MATERIALS\amagufwa ya bene Rwanda (2015_12_03 14_18_17 UTC).jpg
D:\Kmna\Desktop\FACE-PICTS\RAW MATERIALS\ama-Rank y' inyenzi (2014_10_06 13_06_05 UTC) (2015_12_03 14_18_17 UTC).png
D:\Kmna\Desktop\FACE-PICTS\RAW MATERIALS\ama-Rank y' inyenzi (2014_10_15 02_10_34 UTC) (2015_12_03 14_18_17 UTC).png
D:\Kmna\Desktop\FACE-PICTS\RAW MATERIALS\ama-Rank y' inyenzi (2015_12_03 14_18_17 UTC).png
D:\Kmna\Desktop\FACE-PICTS\RAW MATERIALS\Amenhotep_III (1) (2014_10_06 13_06_05 UTC) (2015_12_03 14_18_17 UTC).jpg
D:\Kmna\Desktop\FACE-PICTS\RAW MATERIALS\Amenhotep_III (1) (2014_10_15 02_10_34 UTC) (2015_12_03 14_18_17 UTC).jpg
D:\Kmna\Desktop\FACE-PICTS\RAW MATERIALS\Amenhotep_III (1) (2015_12_03 14_18_17 UTC).jpg
D:\Kmna\Desktop\FACE-PICTS\RAW MATERIALS\Amenhotep_III (2014_10_06 13_06_05 UTC) (2015_12_03 14_18_17 UTC).jpg
D:\Kmna\Desktop\FACE-PICTS\RAW MATERIALS\Amenhotep_III (2014_10_15 02_10_34 UTC) (2015_12_03 14_18_17 UTC).jpg
D:\Kmna\Desktop\FACE-PICTS\RAW MATERIALS\Amenhotep_III (2015_12_03 14_18_17 UTC).jpg
D:\Kmna\Desktop\FACE-PICTS\RAW MATERIALS\amenhotep3_head_03 (2014_10_06 13_06_05 UTC) (2015_12_03 14_18_17 UTC).jpg
D:\Kmna\Desktop\FACE-PICTS\RAW MATERIALS\amenhotep3_head_03 (2014_10_15 02_10_34 UTC) (2015_12_03 14_18_17 UTC).jpg
D:\Kmna\Desktop\FACE-PICTS\RAW MATERIALS\amenhotep3_head_03 (2015_12_03 14_18_17 UTC).jpg
D:\Kmna\Desktop\FACE-PICTS\RAW MATERIALS\an Egyptian [Sudanese woman] (2014_10_06 13_06_05 UTC) (2015_12_03 14_18_17 UTC).jpg
D:\Kmna\Desktop\FACE-PICTS\RAW MATERIALS\an Egyptian [Sudanese woman] (2014_10_15 02_10_34 UTC) (2015_12_03 14_18_17 UTC).jpg
D:\Kmna\Desktop\FACE-PICTS\RAW MATERIALS\an Egyptian [Sudanese woman] (2015_12_03 14_18_17 UTC).jpg
D:\Kmna\Desktop\FACE-PICTS\RAW MATERIALS\an Egyptian [Sudanese woman]2 (2014_10_06 13_06_05 UTC) (2015_12_03 14_18_17 UTC).jpg
D:\Kmna\Desktop\FACE-PICTS\RAW MATERIALS\an Egyptian [Sudanese woman]2 (2014_10_15 02_10_34 UTC) (2015_12_03 14_18_17 UTC).jpg
D:\Kmna\Desktop\FACE-PICTS\RAW MATERIALS\an Egyptian [Sudanese woman]2 (2015_12_03 14_18_17 UTC).jpg
D:\Kmna\Desktop\FACE-PICTS\RAW MATERIALS\Ancient Africa How Europeans have it wrong - Kevin MacDonald (2014_10_06 13_06_05 UTC) (2015_12_03 14_18_17 UTC).png
D:\Kmna\Desktop\FACE-PICTS\RAW MATERIALS\Ancient Africa How Europeans have it wrong - Kevin MacDonald (2014_10_15 02_10_34 UTC) (2015_12_03 14_18_17 UTC).png
D:\Kmna\Desktop\FACE-PICTS\RAW MATERIALS\Ancient Africa How Europeans have it wrong - Kevin MacDonald (2015_12_03 14_18_17 UTC).png
D:\Kmna\Desktop\FACE-PICTS\RAW MATERIALS\ancient African script (2014_10_06 13_06_05 UTC) (2015_12_03 14_18_17 UTC).png
D:\Kmna\Desktop\FACE-PICTS\RAW MATERIALS\ancient African script (2014_10_15 02_10_34 UTC) (2015_12_03 14_18_17 UTC).png
D:\Kmna\Desktop\FACE-PICTS\RAW MATERIALS\ancient African script (2015_12_03 14_18_17 UTC).png
D:\Kmna\Desktop\FACE-PICTS\RAW MATERIALS\Ancient African Scripts (2014_10_06 13_06_05 UTC) (2015_12_03 14_18_17 UTC).png
D:\Kmna\Desktop\FACE-PICTS\RAW MATERIALS\Ancient African Scripts (2014_10_15 02_10_34 UTC) (2015_12_03 14_18_17 UTC).png
D:\Kmna\Desktop\FACE-PICTS\RAW MATERIALS\Ancient African Scripts (2015_12_03 14_18_17 UTC).png
D:\Kmna\Desktop\FACE-PICTS\RAW MATERIALS\ancient African writings (2014_10_06 13_06_05 UTC) (2015_12_03 14_18_17 UTC).png
D:\Kmna\Desktop\FACE-PICTS\RAW MATERIALS\ancient African writings (2014_10_15 02_10_34 UTC) (2015_12_03 14_18_17 UTC).png
D:\Kmna\Desktop\FACE-PICTS\RAW MATERIALS\ancient African writings (2015_12_03 14_18_17 UTC).png
D:\Kmna\Desktop\FACE-PICTS\RAW MATERIALS\ANCIENT HEBREWS DWELLINGS (2014_10_06 13_06_05 UTC)
D:\Kmna\Desktop\FACE-PICTS\RAW MATERIALS\Bamwe mu basigajwe inyuma n’amateka bo mu Mudugudu wa Bukamba - LEVITES (2015_12_03 14_18_17 UTC).jpg
D:\Kmna\Desktop\FACE-PICTS\RAW MATERIALS\Baobab (Adansonia digitata) and elephant, Tanzania (2014_10_06 13_06_05 UTC) (2015_12_03 14_18_17 UTC).jpg
D:\Kmna\Desktop\FACE-PICTS\RAW MATERIALS\Baobab (Adansonia digitata) and elephant, Tanzania (2014_10_15 02_10_34 UTC) (2015_12_03 14_18_17 UTC).jpg
"""#
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