import Foundation
let pattern = #"(?:\'\,\[\]\)\d{0,10}\ then\ begin\s?)^(.*?)\bend;"#
let regex = try! NSRegularExpression(pattern: pattern, options: [.anchorsMatchLines, .dotMatchesLineSeparators])
let testString = ###"""
e R$ '+FormatFloat('#,##0.00', valorPercentual )
else
FieldByName('InstrucoesMultaVencimento').Value := '';
end;
if oCDS_CONVENIOBANCARIOCOBREBEMPROP.Locate('CBC_NOMEPROPRIEDADE','InstrucoesDiasProtesto',[]) then begin
AlteraDescricaoInstrucao := oCDS_CONVENIOBANCARIOCOBREBEMPROP.FieldByName('CBC_VALORPROPRIEDADE').AsString;
AlteraDescricaoInstrucao := StringReplace( AlteraDescricaoInstrucao,'#DIA#', FloatToStr(oCds_ConvenioBanco.FieldByName('CBP_PROTESTODIAS').AsFloat),[rfReplaceAll, rfIgnoreCase]);
FieldByName('InstrucoesDiasProtesto').Value := AlteraDescricaoInstrucao;
end else begin
if ( oCds_ConvenioBanco.FieldByName('CBP_PROTESTODIAS').AsFloat > 0 ) then
FieldByName('InstrucoesDiasProtesto').Value := 'Após '+IntToStr(oCds_ConvenioBanco.FieldByName('CBP_PROTESTODIAS').AsInteger)+' dias do vencimento protestar'
else
FieldByName('InstrucoesDiasProtesto').Value := ''; end;
if ( oCds_ConvenioBanco.FieldByName('CBP_CALCULAVALORJURO').AsString = 'P' ) then
valorJuroDiario := ( ( BoletoBancario.ConvenioBancario.ValorDocumento * oCds_ConvenioBanco.FieldByName('CBP_PERCENTUALJUROSDIARIO').AsFloat) / 100)
else
valorJuroDiario := oCds_ConvenioBanco.FieldByName('CBP_PERCENTUALJUROSDIARIO').AsFloat;
if oCDS_CONVENIOBANCARIOCOBREBEMPROP.Locate('CBC_NOMEPROPRIEDADE','InstrucoesJurosDiario',[]) then
FieldByName('InstrucoesJurosDiario').Value := oCDS_CONVENIOBANCARIOCOBREBEMPROP.FieldByName('CBC_VALORPROPRIEDADE').AsString
else begin
if ( oCds_ConvenioBanco.FieldByName('CBP_PERCENTUALJUROSDIARIO').AsFloat > 0 ) then
FieldByName('InstrucoesJurosDiario').Value := 'Após vencimento cobrar juros de R$ '+FormatFloat('#,##0.00', valorJuroDiario)+' por dia de atraso.'
else
FieldByName('InstrucoesJurosDiario').Value := ''
end;
if ( BoletoBancario.ConvenioBancario.OutrasInstrucoes <> '' ) then
OutrasIntrucoes := oCds_ConvenioBanco.FieldByName('CBB_OUTRASINSTRUCOES').AsString
else
OutrasIntrucoes := '';
if ( NumeroNFSe <> 'SemNumero' ) then{#T31720}
OutrasIntrucoes := OutrasIntrucoes + 'Boleto ref. a Notas: ' + NumeroNFSe; // NumeroNF; {#T31549}
if ( NumeroNF <> 'SemNumero' ) then begin{#T31720}
if ( OutrasIntrucoes <> '') then begin
OutrasIntrucoes := OutrasIntrucoes+#13#10+ 'RPS: ' + NumeroNF; // NumeroNFSe; {#T31549}
end else
OutrasIntrucoes := 'Boleto ref. a RPS: ' + NumeroNF; // NumeroNFSe; {#T31549}
end;varToStr( copy( BoletoBancario.ConvenioBancario.NumeroContaCorrente, Length(BoletoBancario.ConvenioBancario.NumeroContaCorrente), 1));
FieldByName('NomeSacado').Value := IntToStr(BoletoBancario.CodigoCliente)+' - '+BoletoBancario.NomeCliente;
FieldByName('RuaSacado').Value := oCds_TitulosSelecionados.FieldByName('CLN_ENDERECO').AsString+', Nº '+
oCds_TitulosSelecionados.FieldByName('CLN_NUMERO').AsString;
cepCliente := FormatMaskText('99999-999;0;', oCds_TitulosSelecionados.FieldByName('CEP_CEP').AsString);
FieldByName('CidadeEstadoCep').Value := cepCliente+' '+
BoletoBancario.CidadeCliente+'-'+
BoletoBancario.EstadoCliente;
Carteira := Codig
"""###
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