import Foundation
let pattern = #"[\s*<]+\d+$|[\s*<]+(?![A-Z]{6}.*)\w*\d[\w>]*$|\d{6,}$|[\s*<]+[A-Z]{6}$|(?![A-Z]+$)(?<=[A-Z])\w{6}$"#
let regex = try! NSRegularExpression(pattern: pattern, options: .anchorsMatchLines)
let testString = #"""
Norton *AP1223506209 --> Norton *AP or Norton
Norton *AP1223506209
Norton *AP1223511428
Norton AP1223511428
EUROWINGS VYJD6J_123001 --> EUROWINGS
EUROWINGS VYJD6J_123001
EUROWINGS W6PDFI_125626
AER LINGUCB22QKM2 --> AER LINGU or AER LINGUCB
AER LINGUCB22QKM2
AER LINGUCB248L2W
FACEBK *YPEVCCSS32
AIR FRANCE JWNCSC --> AIR FRANCE
AIR FRANCE JWNCSC
AIR FRANCE K8L7TT
PAYPAL *AIRBNB HMQXBW --> PAYPAL *AIRBNB
PAYPAL *AIRBNB HMQXBW
PAYPAL *AIRBNB HMQXNZ
SAS 1174565172360 --> SAS
SAS 1174565172360
SAS 1174565172368
EASYJET 000ESJ5K38 --> EASYJET
EASYJET 000ESJ5K38
EASYJET 000ESJ5R4C
EASYJET 000ESJ5TWN
EASYJET 000ESJ5V86
EASYJET 000ESJ5XZ3
Emirates Group 210003513 --> Emirates Group
Emirates Group 210003513
Emirates Group 210003539
Emirates Group 210003547
EMP Merchan --> EMP Merchan
EMP Merchan 014354B77F00 --> EMP Merchan
EMP Merchan 014354B77F00
EMP Merchan 092F7CC07F00
EMP Merchan 0CD6FC9E7F00
MSFT *<E08003YV1E> --> MSFT or MSFT *
MSFT *<E08003YV1E>
MSFT *<E08003YW6W>
MSFT *<E08003YYYG>
MSFT *<E08003ZB5F>
FACEBK *YNWF9CEQM2 --> FACEBK or FACEBK *
FACEBK *YNWF9CEQM2
FACEBK *YPBT3DNMM2
FACEBK *YPEVCCSS32
PAYPAL *NITS SHOP --> PAYPAL *NITS SHOP
PAYPAL *NITS SHOP
PAYPAL *NITSCHKE
PAYPAL *NITSCHKEGMB
PAYPAL *NITTYGRITTY
PAYPAL *NITZSCHKE
GOOGLE *SmileyGamer --> GOOGLE *SmileyGamer
GOOGLE *SmileyGamer
GOOGLE *Smoke Free
GOOGLE *SMP LLC --> GOOGLE *SMP LLC (or GOOGLE *SMP)
GOOGLE *SMP LLC
Spotify P018792946 --> Spotify
Spotify P018792946
Spotify P0187942C2
Spotify P018796B86
HOTELS.COM137671668500 --> HOTELS.COM
HOTELS.COM137671668500
HOTELS.COM137671798182
HOTELS.COM137673795909
Etsy.com - FJSWIM --> Etsy.com
Etsy.com - FJSWIM
Etsy.com - fluoshop
Etsy.com - FolkTalesPl
"""#
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