如何使用Ruby将字符插入空格

时间:2014-06-20 15:45:03

标签: ruby regex

请原谅我,我对Ruby非常陌生,而且对于一般的编程来说相对较新。我的问题可能并不难,但我一直用谷歌搜索,直到我的手指流血寻找解决方案而我无法得到它。

我有一行文字如下:

6 19 11 28 22 localhost G6UI ip0 cameraLink cameraLinkMissingScans 15116

毕竟说完了,我希望它看起来像这样:

6.19.2014,11.28.22,localhost,G6UI,ip0,cameraLink cameraLinkMissingScans 15116

我已经在Bash中完成了这个(我基本上只是创建一个CSV文件,时间和日期按照我想要的方式格式化)但是,由于理由冗长而无法解释,我喜欢用Ruby做。

我有一个开始,虽然它可能有点悲伤:

myLineOfText.sub!(/[^-a-zA-Z0-9]/,'\1.\2.')

这给了我这个:

6..19 11 28 22 localhost G6UI ip0 cameraLink cameraLinkMissingScans 15116

非常感谢任何帮助,我只需要一些东西让我开始。

提前致谢。

2 个答案:

答案 0 :(得分:1)

如果您可以确定格式始终保持不变,则可以执行以下操作:

str.sub!(/(\d+) (\d+) (\d+)/,'\1.\2.\3').gsub!(/ /,',')

示例:

str='6 19 11 28 22 localhost G6UI ip0 cameraLink cameraLinkMissingScans 15116'
str.sub!(/(\d+) (\d+) (\d+)/,'\1.\2.\3').gsub!(/ /,',')
puts str
=> "6.19.11,28,22,localhost,G6UI,ip0,cameraLink,cameraLinkMissingScans,15116"

答案 1 :(得分:0)

对于这样的问题,答案取决于固定的内容和数据格式的变量。我假设:

  • 至少有九个以空格分隔的子串
  • 子串0和1(基数0)对应月份和年份,并与文字" 2014"形成dd.mm.2014
  • 形式的日期
  • 子串2-4将与'加入。'然后跟着','
  • 子串5-7将与','然后跟着','
  • 其余的子串将与空格
  • 连接

我认为正则表达式不适合格式化;而只是在空格上分割字符串并使用一系列String#join来形成新字符串,以明显的方式组合生成的子字符串:

s = "6 19 11 28 22 localhost G6UI ip0 cameraLink cameraLinkMissingScans 15116"
a = s.split(' ')
#=> ["6", "19", "11", "28", "22", "localhost", "G6UI", "ip0", "cameraLink",
#    "cameraLinkMissingScans", "15116"]

a[0]+'.'+a[1]+'.2014,'+a[2..4].join('.')+','+a[5..7].join(',')+','+
  a[8..-1].join(' ')
#=> "6.19.2014,11.28.22,localhost,G6UI,ip0,cameraLink cameraLinkMissingScans 15116"