我在perl中有一堆字符串,看起来都是这样的:
10 NE HARRISBURG
4 E HASWELL
2 SE OAKLEY
6 SE REDBIRD
PROVO
6 W EADS
21 N HARRISON我需要做的是删除城市名称前的数字和字母。我遇到的问题是,它在不同的城市有很大的不同。数据几乎从来都不一样。是否可以删除此数据并将其保留在单独的字符串中?
发布于 2010-07-23 22:59:07
my @l = (
'10 NE HARRISBURG',
'4 E HASWELL',
'2 SE OAKLEY',
'6 SE REDBIRD',
'PROVO',
'6 W EADS',
'21 N HARRISON',
);
foreach(@l) {据胡布斯说,我更改了正则表达式
my($beg, $rest) = ($_ =~ /^(\d*\s(?:[NS]|[NS]?[EW])*)?(.*)$/);
print "beg=$beg \trest=$rest\n";
}输出:
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,如果你只想运行一个字符串,你可以这样做:
my($beg, $rest) = ($l[3] =~ /^(\d*\s(?:[NS]|[NS]?[EW])*)?(.*)$/);
print "beg=$beg \trest=$rest\n";为了避免出现未初始化值的警告,您必须测试是否定义了$beg:
print defined$beg?"beg=$beg\t":"", "rest=$rest\n";发布于 2010-07-23 22:55:24
试试这个:
for my $s (@strings) {
my @fields = split /\s+/, $s, 3;
my $city = $fields[-1];
}您可以通过测试数组大小来确定字段数:
my $n = @fields;发布于 2010-07-23 22:54:32
看起来您总是想要split()结果中的最后一个元素。或者您可以使用m/(\S+)$/。
https://stackoverflow.com/questions/3319257
复制相似问题