我从日志文件中删除了一些原始数据,目前读取为:
" 80: 0.20%: 2/Jan/14 21:01: /site/podcasts/audio/2013/podcast-07-15-2013.mp3",
" 71: 0.16%: 14/Jan/14 12:18: /site/podcasts/audio/2013/podcast-11-04-2013.mp3",
" 67: 0.17%: 2/Jan/14 23:44: /site/podcasts/audio/podcast-3-21-2011.mp3",
" 67: 0.15%: 15/Jan/14 09:25: /site/podcasts/audio/2013/podcast-08-05-2013.mp3",
" 64: 0.12%: 2/Jan/14 07:40: /site/podcasts/audio/2013/podcast-11-04-2013-1.mp3",
我需要将收集的三条信息转换为Excel电子表格的数据 - 初始冒号,日期和URL之前的数字。因此,如果我将其转换为CSV,则会将其读作
80, 2/Jan/14, /site/podcasts/audio/2013/podcast-07-15-2013.mp3
71, 14/Jan/14, /site/podcasts/audio/2013/podcast-11-04-2013.mp3
67, 2/Jan/14, /site/podcasts/audio/podcast-3-21-2011.mp3
等等。但是,我无法弄清楚如何做到这一点。我写了一些正则数据来捕获正确的数据,但我不确定如何将这些正则表达式转换成我需要的。
这个正则表达式可以得到第一个数字:^"\s{3}(\d+)
这个正则表达式可以得到日期:(\d+\/\w{3}\/14)
此正则表达式可以获取网址:(\/site\/podcasts\/audio\/.*\.mp3)
但是,我不确定如何使用这些正则表达式并将它们转换为我需要的CSV。有什么想法吗?
答案 0 :(得分:1)
这会将您的匹配放在一起,然后放在捕获组中,然后您可以在Ruby中处理它们。我不熟悉Ruby,但我想你可以连接捕获组返回的字符串。
^"\s{3}(\d+)(?:[\s:]|\d\.\d\d%)*(\d+\/\w{3}\/14)[\s\d:]*(\/site\/podcasts\/audio\/.*\.mp3)
答案 1 :(得分:1)
答案 2 :(得分:1)
我个人不会使用正则表达式:
output = ''
File.open("path/to/log", "r") do |f|
f.each_line do |line|
num, percent, date, time, url = line.split(/\s+/)
num = num[0..-2] # removes the colon from the end of the number
output << "#{num}, #{date}, #{url}\n"
end
end
# do whatever you want with the result
puts output
这打印:
80, 2/Jan/14, /site/podcasts/audio/2013/podcast-07-15-2013.mp3
71, 14/Jan/14, /site/podcasts/audio/2013/podcast-11-04-2013.mp3
67, 2/Jan/14, /site/podcasts/audio/podcast-3-21-2011.mp3
67, 15/Jan/14, /site/podcasts/audio/2013/podcast-08-05-2013.mp3
64, 2/Jan/14, /site/podcasts/audio/2013/podcast-11-04-2013-1.mp3
有更短,更聪明的方法来做到这一点,但我喜欢这种方式,因为它可读性和清晰。