2017-07-27 51 views
-3

我有一个字符串,它看起来像这样定义分割字符串:如何在没有分隔符

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

哪有分割这些变量,这样导致数组包含:

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

回答

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

如果字符串总是有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"] 
0

你的可变bar = "Bar 01/12/15"包括空间" "

如果杂物ble foo也应包含一个空格foo = "Foo 02/15/87"

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

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

不过,如果你有一个字符串像"1,2,3",你需要输入分隔符",""1,2,3".split(",")为了得到["1","2","3"]。否则,它将返回["1,2,3"]

1

鉴于提供的字符串(如你的例子):

  1. 包含一个单词和日期(它们之间的零个或多个空格)
  2. 日期是形成与8个字符(即##/##/##格式)
  3. 的日期是在字符串的结束

你可以做到以下几点:

bar.sub(/(.{8})\z/, ' \1').split 
#=> ["Bar", "01/12/15"] 
  • sub(/(.{8})\z/, ' \1')将日期前添加一个空格
  • split将分裂找到空格(或更多)的字符串
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"] 
+0

您可以删除任何不需要的空格(如'“Bar”'),并添加'.map(&:strip)'。 – Gerry

相关问题