我试图在一个小的ruby脚本中实现这个,并在http://www.rubular.com/上测试它,它在那里工作完美。不知道为什么它没有在实际的脚本中执行。这个RegEx有什么问题?
正则表达式: /(motion|links|sound|button|symbol)|(0.\d{8})|(\s\d{1}\s)|(\d{10} \ S)/
这是对文字:
试用ID:1 |试用类型:动作|招? 1 点击时间:0.87913100 1302969732
试用ID:7 |试用类型:按钮|招? 0 点击次数:0.19817800 1302987043
等等,等等
我试图抓住:只有号码,经过“试用型”的一个字。因此,对于示例的第一行,我只想要返回“1动作1 0.87913100 1302969732”。我还想在每次试验中的第一个号码之前保留空格。
我的短Ruby脚本:
File.open('log.txt', 'r') do |file|
contents = file.readlines.to_s
regex = Regexp.new(/(motion|links|sound|button|symbol)|(0\.\d{8})|(\s\d{1}\s)|(\d{10}\s)/)
matchdata = regex.match(contents).to_a
matchdata.each do |match|
if match != nil
puts match
end
end
end
只输出两个 “1” 虽然。嗯...我知道它正在阅读文件内容,当我尝试了一个备用简单正则表达式时,它工作正常。
感谢您给我任何帮助! :)
噢,我并没有试图把所有的文字都写出来 - 我只是想在“试用类型”之后得到数字和单个单词。本来应该提到这个,对不起! – 2011-04-16 21:29:51
@Jeff,这正是我的观点......审判后的单词类型和数字有更多的事情必须匹配。你不能假装他们不在那里......'ruby'当然不会。 – 2011-04-16 21:36:57
哦,我当然无法理解正则表达式,然后 - 我不完全确定如何编辑表达式来说明这些,但不包括它们在结果中... – 2011-04-16 22:10:38