Ho un database con un numero di campi che contengono valori separati da virgola. Ho bisogno di dividere questi campi in Perl, che è abbastanza semplice tranne che alcuni dei valori sono seguiti da CSV annidati racchiusi tra parentesi che non voglio dividere.Perl split list in virgola eccetto quando tra parentesi?
Esempio:
recycling
environmental science
interdisciplinary (e.g.
consumerism
waste management
chemistry
toxicology
government policy
and ethics)
consumer education
Quello che voglio è::
recycling
environmental science
interdisciplinary (e.g., consumerism, waste management, chemistry, toxicology, government policy, and ethics)
consumer education
Può qualsiasi regex Perl (Perts) dare una mano
recycling, environmental science, interdisciplinary (e.g., consumerism, waste management, chemistry, toxicology, government policy, and ethics), consumer education
Splitting su "" mi dà ?
ho cercato di modificare una stringa regex sono trovato in un simile SO post che ha prodotto alcun risultato:
#!/usr/bin/perl
use strict;
use warnings;
my $s = q{recycling, environmental science, interdisciplinary (e.g., consumerism, waste management, chemistry, toxicology, government policy, and ethics), consumer education};
my @parts = $s =~ m{\A(\w+) ([0-9]) (\([^\(]+\)) (\w+) ([0-9]) ([0-9]{2})};
use Data::Dumper;
print Dumper \@parts;
Cosa hai provato fino ad ora? Per prima cosa fai uno sforzo da solo, poi fai delle domande per mostrare quello che hai fatto. –
Non è possibile utilizzare un'espressione regolare per analizzare espressioni nidificate. Hai bisogno di un parser a tutti gli effetti. – Ether
Si potrebbe dare un'occhiata a [Testo :: CSV] (http://search.cpan.org/perldoc?Text::CSV) e vedere se è possibile modificarlo per fare ciò che ti serve. – TLP