import Foundation
let pattern = #"(NAME)((\s)?:(\s)?)([ |,| (|)|\\|\.|\"|\w|\-|\+]*)((\s)*?,(\s)*?)(DESCR)((\s)?:(\s)?)([ |,| (|)|\\|\.|\"|\w|\-|\+]*)(\s)(PID)((\s)?:(\s)?)([\w|\-|\+|=]+)((\s)+,(\s)+)(VID)((\s)?:(\s)?)([\w| ]*)((\s)+,(\s)+)(SN)((\s)?:(\s)?)([\w| ]*)"#
let regex = try! NSRegularExpression(pattern: pattern)
let testString = ##"""
WDL3-4N-C4510-1A#show inventory
NAME: "Switch System", DESCR: "Cisco Systems, Inc. WS-C4510R+E 10 slot switch "
PID: WS-C4510R+E , VID: V03 , SN: FOX1616GNS8
NAME: "Clock Module", DESCR: "Clock Module"
PID: WS-X4K-CLOCK-E , VID: V01 , SN: NWG161794PT
NAME: "Mux Buffer 1 ", DESCR: "Mux Buffers for Redundancy Logic"
PID: WS-X4590-EX= , VID: , SN: NWG16179CP9
NAME: "Mux Buffer 2 ", DESCR: "Mux Buffers for Redundancy Logic"
PID: WS-X4590-EX= , VID: , SN: NWG16179C3T
NAME: "Mux Buffer 3 ", DESCR: "Mux Buffers for Redundancy Logic"
PID: WS-X4590-EX= , VID: , SN: NWG16179CUN
NAME: "Mux Buffer 4 ", DESCR: "Mux Buffers for Redundancy Logic"
PID: WS-X4590-EX= , VID: , SN: NWG16179AXZ
NAME: "Mux Buffer 7 ", DESCR: "Mux Buffers for Redundancy Logic"
PID: WS-X4590-EX= , VID: , SN: NWG16179CTE
NAME: "Mux Buffer 8 ", DESCR: "Mux Buffers for Redundancy Logic"
PID: WS-X4590-EX= , VID: , SN: NWG16179C3V
NAME: "Mux Buffer 9 ", DESCR: "Mux Buffers for Redundancy Logic"
PID: WS-X4590-EX= , VID: , SN: NWG16179CLW
NAME: "Mux Buffer 10 ", DESCR: "Mux Buffers for Redundancy Logic"
PID: WS-X4590-EX= , VID: , SN: NWG16179CVU
NAME: "Linecard(slot 1)", DESCR: "10/100/1000BaseT (RJ45)+V E Series with 48 10/100/1000 baseT Premium PoE ports (Cisco/IEEE)"
PID: WS-X4748-RJ45V+E , VID: V03 , SN: CAT1624L2J7
"""##
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