2014-10-08 49 views
0

我有一個CamelCased字符串,除非大寫字母前加'+',否則我想在大寫字母上拆分爲單個單詞:如何在大寫字母上拆分字符串,除非在前面加上'+'

紅寶石上的分割相當簡單:s.split(/(?=[A-Z])/) 但我無法弄清楚如何添加「除了'+'」部分之外。

例如:

s = "FooBashFizz+BuzzXBar" 
p s.split(/(?=[A-Z])/) 
=> ["Foo", "Bash", "Fizz+", "Buzz", "X", "Bar"] 
期望

=> ["Foo", "Bash", "Fizz+Buzz", "X", "Bar"] 

回答

3

在開始添加的負回顧後發。

irb(main):001:0> s = "FooBashFizz+BuzzXBar" 
=> "FooBashFizz+BuzzXBar" 
irb(main):002:0> s.split(/(?<!\+)(?=[A-Z])/) 
=> ["Foo", "Bash", "Fizz+Buzz", "X", "Bar"] 

說明:

  • (?<!\+)斷言前導字符將是任何但不是+符號。
  • (?=[A-Z])斷言以下字符必須是大寫字母。
+0

這不適合我,直到我嘗試irb1.9。是否有1.8兼容的解決方案? – AShelly 2014-10-08 15:34:42

+0

不錯的一個,Avinash。 ''<!'發生在我身上,但'?='是一個令人驚喜的驚喜。 – 2014-10-08 16:39:16

+0

@CarySwoveland你是我每次觸摸紅寶石標籤時都會鼓勵我的人。謝謝sooooooooo muchhhhh .. :-) – 2014-10-08 16:43:07

1

替代使用String#scan。這也適用於Ruby 1.8。

s = "FooBashFizz+BuzzXBar" 
s.scan(/[A-Z][a-z]*(?:\+[A-Z][a-z]*)*/) 
# => ["Foo", "Bash", "Fizz+Buzz", "X", "Bar"] 
相關問題