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このような文字列の最後の2文字を削除するために使用します

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 に答える