Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 除非前面有一个'+';_Ruby_Regex_Split - Fatal编程技术网

Ruby 除非前面有一个'+';

Ruby 除非前面有一个'+';,ruby,regex,split,Ruby,Regex,Split,我有一个带骆驼壳的字符串,我想在大写处将其拆分为单个单词,除非大写前面有一个“+”: 在Ruby中,大写字母的拆分相当简单:s.split(/(?=[A-Z])/) 但我不知道如何在“+”部分之后添加“except” 例如: s = "FooBashFizz+BuzzXBar" p s.split(/(?=[A-Z])/) => ["Foo", "Bash", "Fizz+", "Buzz", "X", "Bar"] 期望的: => ["Foo", "Bash", "Fizz+Bu

我有一个带骆驼壳的字符串,我想在大写处将其拆分为单个单词,除非大写前面有一个“+”:

在Ruby中,大写字母的拆分相当简单:
s.split(/(?=[A-Z])/)
但我不知道如何在“+”部分之后添加“except”

例如:

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

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

在开始处添加一个负的lookback

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

  • (?断言前面的字符可以是任何字符,但不是
    +
    符号
  • (?=[A-Z])
    断言以下字符必须是大写字母

在开始处添加一个负回溯

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

  • (?断言前面的字符可以是任何字符,但不是
    +
    符号
  • (?=[A-Z])
    断言以下字符必须是大写字母
使用替代方法。这也适用于Ruby 1.8

s = "FooBashFizz+BuzzXBar"
s.scan(/[A-Z][a-z]*(?:\+[A-Z][a-z]*)*/)
# => ["Foo", "Bash", "Fizz+Buzz", "X", "Bar"]
这也适用于Ruby 1.8

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

这对我来说不起作用,直到我尝试了irb1.9。有1.8兼容的解决方案吗?很好,Avinash。
?我想到了,但
?=
是一个惊喜。@CarySwoveland每次我触摸ruby标签时,你都会鼓励我。谢谢你…-)这对我来说不起作用,直到我尝试了irb1.9。有1.8兼容的解决方案吗?很好,Avinash。
?我想到了,但
?=
是一个惊喜。@CarySwoveland每次我触摸ruby标签时,你都会鼓励我。谢谢你…-)