首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >perl字符串操作

perl字符串操作
EN

Stack Overflow用户
提问于 2013-04-16 14:01:09
回答 6查看 315关注 0票数 0

我有一个文件,其中的代码行如下:

代码语言:javascript
复制
analogy of dinner, 12312-12351, http://wwwdinner.com

有时,这些行是这样的:

代码语言:javascript
复制
eggs,bread,bacon:breakfast, 12312-1565A, http://wwwdinner.com

我想用逗号把字符串分成3个部分,但有时前面有逗号,所以我不知道怎么做。

我只需要前面和后面的部分。我不需要中间部分,也就是数字部分;但有时那里也有字母。

EN

回答 6

Stack Overflow用户

发布于 2013-04-16 14:15:29

您可以在此处使用拆分:

代码语言:javascript
复制
split /, /,$_; #split for every (<comma><space>)comma followed by a space

例如:

代码语言:javascript
复制
> echo "eggs,bread,bacon:breakfast, 12312-1565A, http://wwwdinner.com"|perl -lne '@a=split /, /;print $a[0]'
eggs,bread,bacon:breakfast
票数 2
EN

Stack Overflow用户

发布于 2013-04-16 14:04:56

您可以先使用split。

代码语言:javascript
复制
my @p=split/,/ ;

然后将前几个部分连接在一起

代码语言:javascript
复制
$first=join(",",@p[0..scalar(@p)-3]);
$second=$p[-2];
$third=$p[-1];
票数 1
EN

Stack Overflow用户

发布于 2013-04-16 14:24:12

一种方法是使用正则表达式并将其锚定到字符串中一致的某个部分。

例如,要转换为以"|“分隔的管道:

代码语言:javascript
复制
$ 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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16029810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档