首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用perl拆分更改的字符串

使用perl拆分更改的字符串
EN

Stack Overflow用户
提问于 2010-07-23 22:46:13
回答 5查看 152关注 0票数 0

我在perl中有一堆字符串,看起来都是这样的:

代码语言:javascript
复制
10 NE HARRISBURG
4 E HASWELL
2 SE OAKLEY
6 SE REDBIRD
PROVO
6 W EADS
21 N HARRISON

我需要做的是删除城市名称前的数字和字母。我遇到的问题是,它在不同的城市有很大的不同。数据几乎从来都不一样。是否可以删除此数据并将其保留在单独的字符串中?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-07-23 22:59:07

代码语言:javascript
复制
my @l = (
'10 NE HARRISBURG',
'4 E HASWELL',
'2 SE OAKLEY',
'6 SE REDBIRD',
'PROVO',
'6 W EADS',
'21 N HARRISON',
);

foreach(@l) {

据胡布斯说,我更改了正则表达式

代码语言:javascript
复制
    my($beg, $rest) = ($_ =~ /^(\d*\s(?:[NS]|[NS]?[EW])*)?(.*)$/);
    print "beg=$beg \trest=$rest\n";    
}

输出:

代码语言:javascript
复制
beg=10 NE   rest=HARRISBURG
beg=4 E     rest=HASWELL
beg=2 SE    rest=OAKLEY
beg=6 SE    rest=REDBIRD
beg=    rest=PROVO
beg=6 W     rest=EADS
beg=21 N    rest=HARRISON

对于shinjuo,如果你只想运行一个字符串,你可以这样做:

代码语言:javascript
复制
  my($beg, $rest) = ($l[3] =~ /^(\d*\s(?:[NS]|[NS]?[EW])*)?(.*)$/);
  print "beg=$beg \trest=$rest\n";

为了避免出现未初始化值的警告,您必须测试是否定义了$beg:

代码语言:javascript
复制
print defined$beg?"beg=$beg\t":"", "rest=$rest\n";
票数 2
EN

Stack Overflow用户

发布于 2010-07-23 22:55:24

试试这个:

代码语言:javascript
复制
for my $s (@strings) {
    my @fields = split /\s+/, $s, 3;
    my $city = $fields[-1];
}

您可以通过测试数组大小来确定字段数:

代码语言:javascript
复制
my $n = @fields;
票数 3
EN

Stack Overflow用户

发布于 2010-07-23 22:54:32

看起来您总是想要split()结果中的最后一个元素。或者您可以使用m/(\S+)$/。

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

https://stackoverflow.com/questions/3319257

复制
相关文章

相似问题

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