0

我在创建正则表达式时遇到问题。

我有一个看起来像这样的大列表:

4912345671;Test1;489
4912345686;Test2;953
4912345699;Test3;89

现在让我们说这是一个被拆分的列表数组,所以它就像

$line[0] = Number
$line[1] = Text
$line[2] = Length

现在问题是我有另一个列表,如下所示:

49123456-0;0-99;Company 1;Street;Number 1;Post Code;City

不,我想做的是查看第一个列表,如果它以数字开头,直到 - 所以在这种情况下:49123456

现在,如果它以该数字开头,它应该检查下一个数字是否在区域 0-99 之间(在这种情况下),因此所有数字从:49123456-0 到 99(不包括 01 - 09):

491234560
4912345610
4912345611
...
4912345620
4912345621
and so on...

同样重要的是它不是从 01 开始的。如果数字在 0 - 99 范围内

它包括 0,但不包括 01、02、03、04、05、06、07、08、09,所以它从 10 开始,然后一直到 99。如果它的 0 - 999 也是一样,那么它包括 0,但从100。

我想要做的是稍后有一个列表,它看起来像第一个列表,并包含一个带有电话区号的列,所以在这种情况下它看起来像这样:

4912345671;Test1;489;49123456
4912345686;Test2;953;49123456
4912345699;Test3;89;49123456

我希望有人能帮助我。非常感谢您的帮助。

4

1 回答 1

1

您不需要正则表达式。用于substr删除这样的字符串的最后两个字符

use strict;
use warnings;

while (<DATA>) {
  chomp;
  my @fields = split /;/;
  push @fields, $fields[0];
  substr $fields[-1], -2, 2, '';
  print join(';', @fields), "\n";
}

__DATA__
4912345671;Test1;489
4912345686;Test2;953
4912345699;Test3;89

输出

4912345671;Test1;489;49123456
4912345686;Test2;953;49123456
4912345699;Test3;89;49123456
于 2013-02-19T11:11:47.297 回答