2014-11-06 64 views
0

我正在使用rails將舊電子表格中的數據導入到數據庫中。在Ruby的String中抑制分隔符#分割

我有一個包含每一行的列表中,有時格式化爲

first, second 

和其他幾次都是這樣

third and fourth 

,所以我想分手了這個字符串轉換成一列數組,用逗號或單詞「和」分隔。我試圖

my_string.split /\s?(\,|and)\s?/ 

不幸的是,作爲文檔說:

如果模式包含組,各自的比賽將在數組中,以及返回。

這意味着我回去一個數組,看起來像

[ 
[0] "first" 
[1] ", " 
[2] "second" 
] 

顯然只有零級和第二要素是對我有用。作爲實現我想要做的事情的最好方法,你推薦什麼?

+3

使用'(?:...)'分組而不捕捉。 – Stefan 2014-11-06 14:39:46

+0

你也可以刪除有問題的分隔符mystring.gsub(/(,|和)/,'').split'。 – ptd 2014-11-06 14:41:27

+0

@ptd然後將無法區分分隔的項目。爲什麼不用逗號和逗號分隔符替代,然後運行你的分割? – nikkon226 2014-11-06 14:44:00

回答

3

您可以指示正則表達式不使用?:捕獲組。

my_string.split(/\s?(?:\,|and)\s?/) 
# => ["first", "second"] 

順便注意

到數據庫使用Rails

請注意,這與Rails無關,那就是Ruby。

+0

我很高興你提供了一個純Ruby的解決方案,但我提到了Rails,因爲只有Rails才能被接受。 – Dan 2014-11-06 14:59:59

+0

匹配''first,second'.scan(/^[^,\ s] + | \ S + $ /)''有什麼問題? – 2014-11-06 15:03:50

+0

@AvinashRaj用戶提到字符串有時包含逗號,其他時候是AND。 – 2014-11-06 15:06:18