2013-08-03 27 views
0

我们有一个CSV文件。一个特定的列需要有很多条目,并且这些条目要用一个换行符"\n"分隔,但这并没有发生。受影响的列的样本数据如下。用Ruby正则表达式分割字符串

30 units - R135     50 units - R225     80 units - R360 

有没有方法可以将它分成三列?列数不固定。我想我们将不得不使用split条目的许多空格字符(超过两个)。我需要:

data = "that long string" 
# Some operation 
result = ["30 units - R135", "50 units - R225", "80 units - R360"] 

我尝试了一些这样的事情。但它没有奏效。结果是相同的字符串。

a.split('/(\s){3,}/') 

可以采取什么样的方法来分割数据?

+2

这对我的作品。我的猜测是,ruby将你的正则表达式解释为一个字符串。试试a.split(/(\ s){3,} /)。 – Jeremy

+2

你不可能从那个长字符串中得到那个结果。请显示真实的输入和输出;人们不会试图猜测你的数据是什么样的。 –

+2

当然,它没有换行符,通常是csv中记录字符的结尾。如果是在数据中,则必须首先逃脱。 – DGM

回答

3

a.split('/(\s){3,}/') 

的声明将在澳中a分割字符串字符串/(\s){3,}/的发生,这在目标字符串中无处可见,所以它仍然是非法的。

,如果你摆脱单引号的,并使其正则表达式的文字你需要写

data = '30 units - R135     50 units - R225     80 units - R360' 

result = data.split /\s{3,}/ 

p result 

输出到指定的正则表达式

["30 units - R135", "50 units - R225", "80 units - R360"] 
2

这个正确的正则表达式是:

a.split(/\s{3,}/)

的好地方尝试正则表达式的表达式: http://rubular.com/(你可能不需要它,但我喜欢它太多这样分享:))

+2

该OP说他想分割*“超过两个”*空格字符的字符串。两个不超过两个,所以模式是正确的。 – Borodin

+0

@Borodin,对不起,我误解了这个问题,并相应地更新了答案。 –

相关问题