Perl: Ajuda a substituir vírgulas entre aspas com o símbolo @

0

Oi eu tenho esse bloco de texto complicado, onde algumas citações finais aparecem na próxima linha. Quero substituir cada vírgula que aparece entre aspas com @ símbolo.

"----, ----",, ----, ----,,"",start quote," starting
 next line with end quote, ",---,, "--- ,", "begin quote ,,
,,nxt line end quote ",----, ----",, ----, "----,,"---","",
---- ,","----, ----",,"", --",--,----,,,

Eu posso fazer isso com sed se não fosse pela cotação final complicada na próxima linha, mas com problemas para fazer isso com perl . Estou preso com meu projeto com esse problema! Qualquer ajuda apreciada ... Eu tentei cobrir todos os casos com este texto exagerado de lixo.

    
por Harry McKenzie 04.04.2018 / 13:25

1 resposta

1

Se as aspas não puderem ser aninhadas nem vazadas, basta dividir a entrada entre aspas, modificar cada elemento ímpar e juntar de volta com aspas:

#!/usr/bin/perl
use warnings;
use strict;

my $input = '"----, ----",, ----, ----,,"",start quote," starting
 next line with end quote, ",---,, "--- ,", "begin quote ,,
,,nxt line end quote ",----, ----",, ----, "----,,"---","",
---- ,","----, ----",,"", --",--,----,,,';

my @segments = split /"/, $input;  # fix SO syntax highlighting: "
s/,/@/g for @segments[ grep $_ % 2, 0 .. $#segments ];
print join '"', @segments;
    
por 04.04.2018 / 13:40

Tags