2013-02-19 70 views
0

我在创建正则表达式时遇到了问题。Perl:撰写正则表达式

我有一个大名单,看起来像这样:

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 

没有什么,我想要做的是看在第一个列表,如果它与T开始他直到号码 - 所以在这种情况下:49123456

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

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

什么也很重要的是,它从doesent 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 

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

+1

Stack Overflow是关于*特定的编程问题*,它不是一个地方,让写的代码问题为你。如果你做得最好,遇到障碍,你无法克服,那么在这里展示你的代码,我们将帮助你解决它。 – Borodin 2013-02-19 10:12:53

+0

这是不是只重复第一列,删除了最后两位数字?如果出现'4912345605'会发生什么(即以'01'到'09'结尾) – Borodin 2013-02-19 10:14:30

+0

@Borodin这不会发生,但如果发生了,它应该被忽略。我不是在要求我提供正则表达式的代码,因为我不擅长编写它们。我的意思是简单的写简单的,但对于这样的事情,我只是不知道如何开始 – alexj 2013-02-19 10:56:43

回答

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 
+0

我也知道如何删除最后两个字符问题是我必须检查数字是否在第二个区域列 – alexj 2013-02-19 12:42:48

+0

为什么你需要做任何检查?只是修剪一切,就像我已经显示 – Borodin 2013-02-19 12:46:37

+0

哦,sry看起来不错。谢谢。 – alexj 2013-02-19 13:01:42