我有一个文件,其中的代码行如下:
analogy of dinner, 12312-12351, http://wwwdinner.com有时,这些行是这样的:
eggs,bread,bacon:breakfast, 12312-1565A, http://wwwdinner.com我想用逗号把字符串分成3个部分,但有时前面有逗号,所以我不知道怎么做。
我只需要前面和后面的部分。我不需要中间部分,也就是数字部分;但有时那里也有字母。
发布于 2013-04-16 14:15:29
您可以在此处使用拆分:
split /, /,$_; #split for every (<comma><space>)comma followed by a space例如:
> echo "eggs,bread,bacon:breakfast, 12312-1565A, http://wwwdinner.com"|perl -lne '@a=split /, /;print $a[0]'
eggs,bread,bacon:breakfast发布于 2013-04-16 14:04:56
您可以先使用split。
my @p=split/,/ ;然后将前几个部分连接在一起
$first=join(",",@p[0..scalar(@p)-3]);
$second=$p[-2];
$third=$p[-1];发布于 2013-04-16 14:24:12
一种方法是使用正则表达式并将其锚定到字符串中一致的某个部分。
例如,要转换为以"|“分隔的管道:
$ perl -pe 's/(.*), ([0-9]*-[0-9]*), (.*)/$1|$2|$3/' < f
analogy of dinner|12312-12351|http://wwwdinner.com
eggs,bread,bacon:breakfast|12312-12351|http://wwwdinner.com其中0-9-0-9可以匹配中间有破折号的任何一系列数字。例如,23-123213、9-1234和123123213-4将全部匹配。把表达式放在()中“记住”它们,它们可以在以后通过数字引用:$1 =第一个记忆的字段,$2 =第二个,依此类推。
http://codeidol.com/perl/effective-perl/Regular-Expressions/Use-regular-expression-memory./
之所以第一个模式"(.*),“匹配到最后一个",”而不是第一个,是因为perl正则表达式默认是“贪婪的”-它们试图尽可能地匹配。
http://www.troubleshooters.com/codecorn/littperl/perlreg.htm#Greedy
https://stackoverflow.com/questions/16029810
复制相似问题