2010-10-22 50 views
3

我有相當的紅寶石使用正則表達式的難度分裂沿着幾個分隔符的字符串,這些分隔符是:紅寶石正則表達式分割困難,接近,但不是很

  • /
  • &

這些分隔符中的每一個在分隔符的任一側都可以有任意數量的空格,但每個項目可以包含有效的空間。 ,我一直在測試針對一個很好的例子是字符串1, 2 /3 and 4 12

我想的是周圍的"1, 2 /3 and 4 12".split(regex) =>["1", "2", "3", "4 12"]

我已經能夠獲得最接近的是/\s*,|\/|&|and \s*/線的東西,但是這會產生["1", " 2 ", "3 ", "4 12"]代替的預期結果。

認識到這是非常接近的,我可以簡單地修剪每個項目,但如此密切並且知道它可以完成就會讓我發狂。希望有人能幫助我保持瘋狂。

回答

3
/\s*,|\/|&|and \s*/ 

這個解析爲/(\s*,)|\/|&|(and \s*)/。即領先\s*僅適用於逗號,尾部\s*僅適用於「和」。你想:

/\s*(,|\/|&|and)\s*/ 

或者,以避免捕捉:

/\s*(?:,|\/|&|and)\s*/ 
+0

我知道我很接近!我對'?:'不熟悉,我猜這就是訣竅。如果沒有'?:',不會縫合返回正確的結果。謝謝,現在我需要去查找什麼?: – Apeiron 2010-10-22 22:39:25

+0

@Apeiron:'?:'只是使組織不捕獲。在這種情況下,這意味着由parens匹配的零件將不會顯示在「split」結果中。 – sepp2k 2010-10-22 22:43:06

1

嘗試.scan

irb(main):030:0> "1, 2 /3 and 4 12".scan(/\d+(?:\s*\d+)*/) 
=> ["1", "2", "3", "4 12"] 
1

你可以試試:

(?:\s*)[,\/](?:\s*)|(?:\s*)and(?:\s*) 

但作爲Nakilon建議,你掃描可能會有更好的運氣分裂的tead。