Deb wrote:
> 
> Hi,
> 
> I'm having trouble coming up with a regular expression for $lines in @lines
> of this form:
> 
> units =               [EMAIL PROTECTED] [EMAIL PROTECTED]:[EMAIL PROTECTED]
> units =               [EMAIL PROTECTED]
> units =               [EMAIL PROTECTED] [EMAIL PROTECTED]
> 
> ' ^units = ' is expected, all the rest is not - ie, one or more addrs, but
> they must be comma separated, not space, semi-colon or colon separated.  So
> far, I've got:
> 
> foreach my $line (@lines) {
>    if ($line =~ /^units/)
>    {
>      $line =~ s/:/,/g;
>      $line =~ s/;/,/g;
>    }
> }
> 
> The part I'm having trouble with is replacing the space(s) between the
> addresses.  I don't want to touch any other whitespace.  Only the space or
> spaces which might separate more than one address.  It's okay if there's a
> comma and a space, but anything else needs to be replaced with a comma.  There
> also doesn't have to be a space after the comma.  Only the comma is necessary.
> 
> I can't seem to find the right incantation to replace just those spaces.


$ perl -e'
my @lines = (
    q/units =               [EMAIL PROTECTED] [EMAIL PROTECTED]:[EMAIL PROTECTED]/,
    q/units =               [EMAIL PROTECTED] /,
    q/units =               [EMAIL PROTECTED] [EMAIL PROTECTED]/,
    );
for my $line ( @lines ) {
    print "$line\n";
    $line =~ s{^(units\s+=\s+)(\S.*\S)} {
        ( $a, $b ) = ( $1, $2 );
        $b =~ s/\b(?:(?<!,) +|[;:])\b/, /g;
        "$a$b"
        }e;
    print "$line\n";
    }
'
units =               [EMAIL PROTECTED] [EMAIL PROTECTED]:[EMAIL PROTECTED]
units =               [EMAIL PROTECTED], [EMAIL PROTECTED], [EMAIL PROTECTED]
units =               [EMAIL PROTECTED] 
units =               [EMAIL PROTECTED] 
units =               [EMAIL PROTECTED] [EMAIL PROTECTED]
units =               [EMAIL PROTECTED], [EMAIL PROTECTED]



John
-- 
use Perl;
program
fulfillment

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to