import Foundation
let pattern = #"(?:Nr.\s*nota\s*Folha\s*Data\s*preg.o\n(?<numNota>\d+)\s*(?<numFolha>\d+)\s*(?<dataPregao>\d{2}\/\d{2}\/\d{4})\s*(?<corretora>.+)\n(?:1-BOVESPA\s*.*\n)+Resumo\s*dos\s*Neg.cios\s*)"#
let regex = try! NSRegularExpression(pattern: pattern)
let testString = #"""
Nr. nota Folha Data pregão
2807356 1 02/03/2020
CLEAR CORRETORA - GRUPO XP
1-BOVESPA C VISTA GERDAU METPN ED N1 100 8,00 800,00 D
1-BOVESPA C VISTA ITAUSAPN EDJ N1 200 12,10 2.420,00 D
1-BOVESPA C VISTA ITAUSAPN EDJ N1 D 500 12,00 6.000,00 D
1-BOVESPA V VISTA ITAUSAPN EDJ N1 D 100 12,11 1.211,00 C
1-BOVESPA V VISTA ITAUSAPN EDJ N1 D 100 12,11 1.211,00 C
Resumo dos Negócios
Debêntures 0,00
Vendas à vista 2.422,00
Compras à vista 9.220,00
Opções - compras 0,00
Opções - vendas 0,00
Operações à termo 0,00
Valor das oper. c/ títulos públ. (v. nom.) 0,00
Valor das operações 11.642,00
Resumo Financeiro
Clearing
Valor líquido das operações 6.798,00 D
Taxa de liquidação 2,83 D
Taxa de Registro 0,00 D
Total CBLC 6.800,83 D
Bolsa
Taxa de termo/opções 0,00 D
Taxa A.N.A. 0,00 D
Emolumentos 0,39 D
Total Bovespa / Soma 0,39 D
Custos Operacionais
""
Taxa Operacional 0,00 D
Execução 0,00
Taxa de Custódia 0,00
Impostos 0,00
I.R.R.F. s/ operações, base R$0,00 0,00
Outros 0,00 C
Total Custos / Despesas 0,00 D
Nr. nota Folha Data pregão
3408171 1 11/03/2020
CLEAR CORRETORA - GRUPO XP
1-BOVESPA C VISTA VIVER ON NM 100 1,79 179,00 D
Resumo dos Negócios
Debêntures 0,00
Vendas à vista 0,00
Compras à vista 179,00
Opções - compras 0,00
Opções - vendas 0,00
Operações à termo 0,00
Valor das oper. c/ títulos públ. (v. nom.) 0,00
Valor das operações 179,00
Resumo Financeiro
Clearing
Valor líquido das operações 179,00 D
Taxa de liquidação 0,04 D
Taxa de Registro 0,00 D
Total CBLC 179,04 D
Bolsa
Taxa de termo/opções 0,00 D
Taxa A.N.A. 0,00 D
Emolumentos 0,00 D
Total Bovespa / Soma 0,00 C
Custos Operacionais
""
Taxa Operacional 0,00 D
Execução 0,00
Taxa de Custódia 0,00
Impostos 0,00
I.R.R.F. s/ operações, base R$0,00 0,00
Outros 0,00 C
Total Custos / Despesas 0,00 D
"""#
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