2010-05-09 136 views
2

我有一個包含許多行的文件。每行有一列可能包含逗號分隔值。我需要每行不同(即沒有逗號分隔值)。正則表達式,將用逗號分隔的行分隔成不同的行

下面是一個例子行:

 
AB AB10,AB11,AB12,AB15,AB16,AB21,AB22,AB23,AB24,AB25,AB99 ABERDEEN Aberdeenshire 

列用逗號分隔(郵政編碼區域,郵編區,鎮後,原郵政縣)。

所以上面的行會都被轉換爲:

 
AB AB10 ABERDEEN Aberdeenshire 
AB AB11 ABERDEEN Aberdeenshire 
AB AB12 ABERDEEN Aberdeenshire 
... 
... 

我嘗試以下,但它沒有工作......

 
(.+)\t(([0-9A-Z]+),)+\t(.+)\t(.+) 
+0

哪種語言? – kennytm 2010-05-09 10:04:53

+0

我在使用BBEdit的時候是GREP供電的......我相信這是Perl兼容的。如果沒有,我可以切換到VIM或任何建議的編輯器:) – Nick 2010-05-09 10:09:16

回答

0

我同意RegEx不是最好的方法,但如果這是您可以使用的所有方法,那麼這應該有用。 (反覆做,直到有沒有更多的比賽)

編輯

與OP的從意見最終解決方案更新。

Find: (.+)\t([^,\s]+),([^\t]+)\t(.+) 
Replace: \1\t\2\t\4\r\1\t\3\t\4 
+0

這很好 - 謝謝...這是一個稍微改進,稍微改進了一點。謝謝! 查找:「(。+)\ t([^,\ s] +),([^ \ t] +)\ t(。+)」 替換爲:「\ 1 \ t \ 2 \ t \ 4 \ r \ 1 \ t \ 3 \ t \ 4「 編輯:似乎這些評論不能包含標記... – Nick 2010-05-09 10:45:29

+0

是的一分錢剛剛下降,你的領域是製表符分隔,我剛剛回來更新我的文章。很高興你發現它! – 2010-05-09 10:46:59

+0

@Nick RE:在評論中標記可以做有限的數量。看到接受的答案在這裏http://meta.stackexchange.com/questions/4481/apply-markup-code-in-comments – 2010-05-09 10:49:19

0

你想要做的是「爆炸」通過創建排列將許多行排成很多行。如果只有一個列有多個值,則可以用正則表達式完成此操作,但如果有多個多值列,則已經有很多可能的排列組合(例如m × n n組合,其中mn是兩個多值列中的值的數量)。

我不認爲正則表達式將是這項任務的正確工具。

+0

該死的......那不是好消息! – Nick 2010-05-09 10:09:39

+0

只有1列具有多個值(分區),例如AB10,AB11等... – Nick 2010-05-09 10:19:55

0

我同意stakx這聽起來不像一個正則表達式的好地方。

我會寫一個小程序,它會讀取每一行,將行分割成列,將每個相關列分成一列值,然後遍歷所有這些列的組合,每次輸出一行。

假設它是隻可以有多個令牌一列,那就基本上是這樣的:

while not InputFile.EndOfFile: 
    line = InputFile.readline(); 
    columns = line.split('\t'); //Assuming 1-based array, so indexes 1-4 
    col2values = columns[2].split(','); 
    for each value in col2values: 
    OutputFile.WriteLine(columns[1]+'\t'+value+'\t'+columns[3]+'\t'+columns[4]); 

如果多個列可以有多個值,簡單地說另一個循環中的每一個。

+0

是的腳本也會工作 - 只是希望正則表達式會做的伎倆。 – Nick 2010-05-09 10:46:55

相關問題