in reply to Re: Need method to create Regular expression for known pattern in the middle of a line
in thread Need method to create Regular expression for known pattern in the middle of a line

The problem with your regex (which may or may not be a real problem) is that the \w* limit what is included - a ( or | etc will cause an aberrant failure. It would be much more robust to use [^,]* as this includes everything except the comma separator....

cheers

tachyon

s&&rsenoyhcatreve&&&s&n.+t&"$'$`$\"$\&"&ee&&y&srve&&d&&print

  • Comment on Re: Re: Need method to create Regular expression for known pattern in the middle of a line
  • Download Code

Replies are listed 'Best First'.
Re: Re: Re: Need method to create Regular expression for known pattern in the middle of a line
by Ya (Initiate) on Feb 10, 2003 at 08:39 UTC
    I am sorry to have not mentioned this earlier that, fields may be delimited with dobule quotes only on one side and may conatin commas as part of field content.

    My Problem is to identify fields which were delimited only on side with double quote but may or may not have commas in them. And then to delimit them in double quotes.

    regards Ya

      The only change you need to make to the code I suggested would be to to use Text::CSV or similar to split your CSV elements up. This will correctly deal with commas,"within, quotes,",,,and,only,split,on,the,unquoted,commas

      use Text::CSV; my $csv = Text::CSV->new(); while(<DATA>) { my ($name, $data) = split "="; $csv->parse($data); my @data = $csv->fields(); for my $i ( 0.. $#data ) { next unless $data[$i] eq 'ResGen'; # found a ResGen so see what we had 3 commas ago (do bounds chec +k to0) next if $i -3 < 0; my $back_a_bit = $data[$i -3]; print chop($back_a_bit) eq '"' ? "$name: Found quote\n" : "$name +: No quote\n"; } }

      cheers

      tachyon

      s&&rsenoyhcatreve&&&s&n.+t&"$'$`$\"$\&"&ee&&y&srve&&d&&print