1
Я пытаюсь очистить некоторые неаккуратные поля адресов в csv.Perl regex эффективный способ сохранить соответствие подстроке?
start_of_lineA,="123456789",end_of_lineA
start_of_lineB,="234560000",end_of_lineB
start_of_lineC,34567,end_of_lineC
, что я чищу до:
start_of_lineA,12345,end_of_lineA
start_of_lineB,23456,end_of_lineB
start_of_lineC,34567,end_of_lineC
И некоторые элементы уличного адреса, содержащие запятые, которые я могу просто бросить:
start_of_lineD,"123 Foo St, #1",End_of_lineD
start_of_lineE,"456 Bar Lane, suite A, B",End_of_lineE
к:
start_of_lineD,"123 Foo St",End_of_lineD
start_of_lineE,"456 Bar Lane",End_of_lineE
До сих пор, что я придумал, :
chomp;
if($_ =~ m/="/)
{
$_ =~ s/="\d{5}\K\d*"//g;
$_ =~ s/="//g;
}
if($_ =~ m/"[^"|^,]+,[^"]*"/)
{
$_ =~ s/"[^"|^,]+\K,[^"]*"//g;
$_=~ s/"//g;
}
@line = split(/,/,$_);
etc.
В то время как это работает, кажется, неэлегантно. Есть ли более чистый способ?
[Текст :: CSV_XS] (http://p3rl.org/Text::CSV_XS)? – choroba