RubyonRails-如何拆分字符串和数字?
我有一个字符串RubyonRails-如何拆分字符串和数字?,ruby,ruby-on-rails-3,Ruby,Ruby On Rails 3,我有一个字符串“fooo2014” 我希望结果是=>“Foo Foo 2014” 有什么想法吗?这很好: puts "FooFoo2014".scan(/(\d+|[A-Z][a-z]+)/).join(' ') # => Foo Foo 2014 当然,如果您将数字和单词与大写字母分开。如果只有字母,那么只有数字: target = "FooFoo2014" match_data = target.match(/([A-Za-z]+)(\d+)/) p match_data[1] #
“fooo2014”
我希望结果是=>“Foo Foo 2014”
有什么想法吗?这很好:
puts "FooFoo2014".scan(/(\d+|[A-Z][a-z]+)/).join(' ')
# => Foo Foo 2014
当然,如果您将数字和单词与大写字母分开。如果只有字母,那么只有数字:
target = "FooFoo2014"
match_data = target.match(/([A-Za-z]+)(\d+)/)
p match_data[1] # => "FooFoo"
p match_data[2] # => "2014
如果是两个单词,每个单词由一个大写字母、小写字母和数字组成:
target = "FooBar2014"
match_data = target.match(/([A-Z][a-z]+)([A-Z][a-z]+)(\d+)/)
p match_data[1] # => "Foo"
p match_data[2] # => "Bar"
p match_data[3] # => "2014
更好的正则表达式可能是可能的。“Fooo2014”
"FooFoo2014"
.gsub(/(?<=\d)(?=\D)|(?<=\D)(?=\d)|(?<=[a-z])(?=[A-Z])/, " ")
# => "Foo Foo 2014"
.gsub(/(?您的示例有点泛化。因此,这可能是在错误的方向上猜测。尽管如此,您似乎希望重新格式化字符串:
"FooFoo2014".scan(/^([A-Z].*)([A-Z].*\D*)(\d+)$/).flatten.join(" ")
由于“fooo2014”
是一个对您很重要的内部结构字符串,您需要自己找到正确的正则表达式
从你的问题中,我提取了两项任务:
在大写字母处拆分fofoo
/([A-Z].*)([A-Z].*)/
可以这样做,因为您只有标准拉丁字母
把字母从数字中分开
/(.*\D)(\D+)/
实现了这一点
在我的ruby版本中,扫描结果是一个数组。请在您的设置中验证这一点
如果你认为正则表达式太复杂了,那么我建议你仔细研究一下ActiveSupport。这可能会对你有所帮助。输入总是固定的吗?从来没有FooBaaz2014?或者类似的东西?是什么让“Fooboo”变成了“Fooboo”?是大写字母吗?一分为二?每三个字母都是一个新词?