我有一个CamelCased字符串,我希望在大写字母中分成单个单词,除非大写字母前面加上'+':
在Ruby中分割上限非常简单:s.split(/(?=[A-Z])/)
但我无法弄清楚如何添加“除了'+''之外的部分。
例如:
s = "FooBashFizz+BuzzXBar"
p s.split(/(?=[A-Z])/)
=> ["Foo", "Bash", "Fizz+", "Buzz", "X", "Bar"]
期望的:
=> ["Foo", "Bash", "Fizz+Buzz", "X", "Bar"]
答案 0 :(得分:3)
在开始时添加负面的lookbehind。
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])
断言以下字符必须是大写字母。答案 1 :(得分: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"]