import Foundation
let pattern = ##"LOG FORMAT.*\[(.*)\].*#"##
let regex = try! NSRegularExpression(pattern: pattern, options: .anchorsMatchLines)
let testString = ##"""
#KEEP THIS FILE IN THE SAME DIRECTORY AS __INIT.PY__, OTHERWISE IT WON'T WORK
SETTINGS:
FILE TO BE SORTED: "C:\Temp\xmls - Copy" #IF YOU ENTER "in" HERE THEN YOU CAN ENTER FILENAME FROM THE CONSOLE
MINIMUM DISPLAY LEVEL OF LOGS: 10 #Warning = 30, Info = 20, Debug = 10, Notset = 0
LOG DELIMITER SYMBOL: "dupa" #A SYMBOL WHICH SEPARATES THE LOG FORMAT MODULES
FILE TO STORE LOGS: "DEFAULT" #TO CHANGE IT, PASTE FULL PATH OF THE CHOSEN DIRECTORY, RMEMBER TO PUT NAME.TXT AT THE END. DEFAULT = directory of __init.py__
LOG FORMAT: [LEVELNAME, ASCTIME, MESSAGE] #A FORMAT IN WHICH LOGS WILL BE STORED IN THE FILE (Surrounded by [] brackets)
***
LIST OF ATTRIBUTES:
LEVELNAME, #Text logging level for the message ('DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL').
ASCTIME, #Human-readable time when the LogRecord was created. By default this is of the form ‘2003-07-08 16:49:45,896’ (the numbers after the comma are millisecond portion of the time).
MESSAGE, #The logged message, computed as msg % args.
FUNCNAME, #Name of function containing the logging call.
FILENAME, #Filename portion of pathname.
PATHNAME, #Full pathname of the source file where the logging call was issued (if available).
EMPTY #log will not be stored (IT SHOULD BE THE ONLY ONE MODULE IN THE LOG FORMAT)
ADDITIONAL ATTRIBUTES:
CREATED #Time when the LogRecord was created (as returned by time.time()).
LEVELNO #Numeric logging level for the message (DEBUG, INFO, WARNING, ERROR, CRITICAL).
LINENO #Source line number where the logging call was issued (if available).
MODULE #Module (name portion of filename).
MSECS #Millisecond portion of the time when the LogRecord was created.
NAME #Name of the logger used to log the call.
PROCESS #Process ID (if available).
PROCESSNAME #Process name (if available).
RELATIVECREATED #Time in milliseconds when the LogRecord was created, relative to the time the logging module was loaded.
THREAD #Thread ID (NOT available)
THREADNAME #Thread name (NOT available).
***
"""##
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