如何在没有定义分隔符的情况下拆分字符

时间:2017-07-27 21:34:51

标签: arrays ruby string split

我有一个看起来像这样的字符串:

bar = "Bar 01/12/15"
foo = "Foo02/15/87"

如何拆分这些变量,以便生成的数组包含:

bar_array = ["Bar", "01/12/15"]
foo_array = ["Foo","02/15/87"]

6 个答案:

答案 0 :(得分:2)

r = /(?<=[[:alpha:]]) ?(?=\d)/

"Bar 01/12/15".split(r)
  #=> ["Bar", "01/12/15"]
"Foo02/15/87".split(r)
  #=> ["Foo", "02/15/87"]

正则表达式为

  • 匹配正面背后的字母
  • 匹配0或1个空格
  • 匹配正向前瞻中的数字

答案 1 :(得分:1)

如果你的字符串总是 dd / mm / yy 格式最后,你可以创建一个方法,从字符串中取出最后8个字符并返回两个值(剩余字符串和日期)作为数组,如下所示:

def to_array(string)
  date = string[-8..-1]
  [string.delete(date).strip, date]
end

to_array(bar)
#=> ["Bar", "01/12/15"]

to_array(foo)
# => ["Foo", "02/15/87"]

答案 2 :(得分:1)

鉴于提供的字符串(如示例所示):

  1. 包含一个单词和一个日期(它们之间有零个或多个空格)
  2. 日期由8个字符组成(即##/##/##格式)
  3. 日期位于字符串
  4. 的末尾

    您可以执行以下操作:

    bar.sub(/(.{8})\z/, ' \1').split
    #=> ["Bar", "01/12/15"]
    
    • sub(/(.{8})\z/, ' \1')将在日期之前添加空格
    • split会拆分找到空格(或更多)的字符串

答案 3 :(得分:0)

正则表达式

"a,b'c d".split /\s|'|,/
# => ["a", "b", "c", "d"]

这里有关于正则表达式的一些文档

http://rubylearning.com/satishtalim/ruby_regular_expressions.html

答案 4 :(得分:0)

您的变量bar = "Bar 01/12/15"包含空格" "

如果变量foo也应包含foo = "Foo 02/15/87"

的空格

您可以在.split上使用bar而无需输入分隔符。

它将返回["Bar", "01/12/15"](请记住将变量bar_array设置为等于它。)

但是,如果您有"1,2,3"之类的字符串,则需要输入分隔符",""1,2,3".split(",")才能获得["1","2","3"]。否则,它将返回["1,2,3"]

答案 5 :(得分:0)

正则表达式如何匹配日期表格及其前面的内容:

bar = "Bar 01/12/15"
foo = "Foo02/15/87"
pattern = /^(.*?)([0-9]{2}\/[0-9]{2}\/[0-9]{2})/

bar.scan(pattern).flatten.map(&:strip)
=> ["Bar", "01/12/15"]

foo.scan(pattern).flatten.map(&:strip)
=> ["Foo", "02/15/87"]