2013-02-19 72 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