2010-05-09 137 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

相关问题