On Sat, Feb 18, 2012 at 3:26 PM, Rob Dixon <rob.di...@gmx.com> wrote: > On 18/02/2012 04:51, lina wrote: >> >> >> How to make a match for the following? >> >> "V c #767676 " /* "0.808" */, >> "W c #6F6F6F " /* "0.846" */, >> "X c #696969 " /* "0.885" */, >> "Y c #626262 " /* "0.923" */, >> "Z c #5C5C5C " /* "0.962" */, >> "a c #555555 " /* "1" */, >> "b c #4E4E4E " /* "1.04" */, >> "c c #484848 " /* "1.08" */, >> >> I tried the >> >> /^\"([[:alpha:])\s+c\s+\#*\s\/\*\"(\d)*\"*/x >> $dict{$1} = $2; >> >> not work, >> >> mainly interest the >> >> V 0.808 >> W 0.846 >> . . >> . . >> . . >> >> parts > > > Hi Lina > > Your program fails because you have just /#*/ in the middle of your > regex to match #767676 etc. when you need /#[A-Z0-9]+/. But there is no > need to match every detail of a string exactly when /.+/ will do the > trick. The program below does what you need. Thanks Rob, > > HTH, > > Rob > > > > use warnings; > use strict; > > while (<DATA>) { > next unless /([A-Za-z]).+"([0-9.]+)/; > print "$1 $2\n"; > } > > __DATA__ > > "V c #767676 " /* "0.808" */, > "W c #6F6F6F " /* "0.846" */, > "X c #696969 " /* "0.885" */, > "Y c #626262 " /* "0.923" */, > "Z c #5C5C5C " /* "0.962" */, > "a c #555555 " /* "1" */, > "b c #4E4E4E " /* "1.04" */, > "c c #484848 " /* "1.08" */, > > **OUTPUT** > > V 0.808 > W 0.846 > X 0.885 > Y 0.923 > Z 0.962 > a 1 > b 1.04 > c 1.08
It works, -- To unsubscribe, e-mail: beginners-unsubscr...@perl.org For additional commands, e-mail: beginners-h...@perl.org http://learn.perl.org/