import Foundation
let pattern = #"^(\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2}:\d{2},\d{3})\s+(INFO)\s+(THOUGHTS):\s+(.*)$"#
let regex = try! NSRegularExpression(pattern: pattern, options: .anchorsMatchLines)
let testString = #"""
2023-04-18 02:10:54,562 INFO THOUGHTS: Before proceeding, can you provide more context on what you are trying to accomplish and any variables you have available?
2023-04-18 02:10:55,002 INFO REASONING: I need more information in order to determine the best course of action.
2023-04-18 02:10:55,312 INFO PLAN:
2023-04-18 02:10:55,389 INFO - Request additional information from the user
2023-04-18 02:10:55,584 INFO CRITICISM: N/A
2023-04-18 02:10:55,671 INFO NEXT ACTION: COMMAND = do_nothing ARGUMENTS = {}
2023-04-18 02:11:01,545 INFO -=-=-=-=-=-=-= COMMAND AUTHORISED BY USER -=-=-=-=-=-=-=
2023-04-18 02:11:01,995 INFO SYSTEM: Command do_nothing returned: No action performed.
2023-04-18 02:11:30,621 INFO THOUGHTS: Clone the Nextflow DSL repository from 'https://github.com/nextflow-io/patterns' into a local directory, so we can use it to develop the parser.
2023-04-18 02:11:31,080 INFO REASONING: We need to access the Nextflow DSL files in order to study their structure and syntax to develop the parser.
2023-04-18 02:11:31,569 INFO PLAN:
2023-04-18 02:11:31,620 INFO - Execute clone_repository command to clone the Nextflow DSL repository\n- Store the cloned repository in a local directory for development.
2023-04-18 02:11:32,105 INFO CRITICISM: We need to ensure that the cloned repository is up-to-date and contains the necessary files required for the parser.
2023-04-18 02:11:32,546 INFO NEXT ACTION: COMMAND = clone_repository ARGUMENTS = {'repository_url': '<url>', 'clone_path': '<directory>'}
2023-04-18 02:12:40,238 INFO -=-=-=-=-=-=-= COMMAND AUTHORISED BY USER -=-=-=-=-=-=-=
2023-04-18 02:12:40,681 INFO SYSTEM: Command clone_repository returned: Error: Cmd('git') failed due to: exit code(128)
cmdline: git clone -v -- <url> /home/appuser/auto_gpt_workspace/<directory>
stderr: 'fatal: repository '<url>' does not exist
'
2023-04-18 02:12:54,114 INFO THOUGHTS: Let's try cloning the Nextflow DSL repository again. The URL must be correct for the command to work.
2023-04-18 02:12:54,534 INFO REASONING: We need to access the Nextflow DSL files to study their structure and syntax to develop the parser.
2023-04-18 02:12:55,010 INFO PLAN:
2023-04-18 02:12:55,062 INFO - Execute clone_repository command with correct URL to clone the Nextflow DSL repository\n- Store the cloned repository in a local directory for development.
2023-04-18 02:12:55,522 INFO CRITICISM: We need to ensure that the cloned repository is up-to-date and contains the necessary files required for the parser.
2023-04-18 02:12:55,957 INFO NEXT ACTION: COMMAND = clone_repository ARGUMENTS = {'repository_url': '<url>', 'clone_path': '<directory>'}
2023-04-18 02:13:21,532 INFO -=-=-=-=-=-=-= COMMAND AUTHORISED BY USER -=-=-=-=-=-=-=
2023-04-18 02:13:21,842 INFO SYSTEM: Command clone_repository returned: Error: Cmd('git') failed due to: exit code(128)
cmdline: git clone -v -- <url> /home/appuser/auto_gpt_workspace/<directory>
stderr: 'fatal: repository '<url>' does not exist
'
"""#
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