在Ruby中逐行解析和匹配数字

时间:2016-12-08 12:24:06

标签: ruby regex

我正在尝试创建一个程序,我输入我的彩票号码,并将其与彩票公司提供的彩票号码相匹配。我想逐行阅读docx文件,并突出显示每行匹配的数字。我试图解决它。但到目前为止还没有到位。我试过用红宝石制作正则表达式,但运气不好。我已经能够打开并打印出文件的行,但不匹配任何数字。

This is exactly what I want to build

puts "What are your lotto numbers?"
numbers = gets.chomp
File.open("/Users/pcu/Documents/ruby/number.rtf").each do |line|
    if numbers[/(19|23/]
    puts "Has 19 or 23"
    end 
end

这是我完全错误的代码。但我正试着把数字搞定。将其转换为变量并使用正则表达式查找匹配的数字。然后我需要尝试找出如何将文件上的数字与chomp匹配,然后突出显示文件上的每一行。甚至可能打印出带有突出显示数字的文件。

1 个答案:

答案 0 :(得分:1)

您有两个不同的问题:

  • 根据用户输入创建一个正则表达式,并用它来解析一个数字列表
  • 读取和写入RTF文件。

第一步

要获取中奖号码数组,您可以使用gets后跟scan来查找字符串中的每个数字。

如果您有一系列中奖号码,则可以使用join('|')创建正则表达式。如果您确定3始终在文件中写为03,则可以根据rjust的需要为每个数字添加一个零。

我们在正则表达式的开头和结尾添加\b,以确保仅匹配整数:/23/否则匹配123。不管怎样,不应该有任何3位数字,但它仍然可以避免一些错误。

然后,您可以使用gsub在每个中奖号码后添加一个勾号,并根据当前有多少个刻度线添加sort

file_content = "18 19 37 21 39 29 39
22 33 83 29 92 03 12
83 74 56 29 34 94 92
94 72 57 65 38 85 95
18 26 37 28 39 29 39
22 33 83 29 92 03 12
83 74 56 29 34 94 92
94 72 57 65 38 85 95
18 26 37 28 39 29 39
22 33 83 29 92 03 12
83 74 56 29 34 94 92
94 72 57 65 38 85 95
18 26 37 28 39 29 39
22 33 83 29 92 03 12
83 74 56 29 34 94 92
94 72 57 65 38 85 95
18 26 37 28 39 29 39
22 33 83 29 92 03 12
83 74 56 29 34 94 92
94 72 57 65 38 85 95"

puts "Please input winning numbers, separated by a space. Example : 1 2 3 4 5 6 7"
numbers = gets.chomp.scan(/\d+/).map{|d| d.rjust(2,'0')}
puts

regex = /(\b#{numbers.join('|')}\b)/

puts file_content.gsub(regex,'\1✓').each_line.sort_by{|l| l.count('✓')}.reverse

输出:

18✓ 19✓ 37 21✓ 39✓ 29✓ 39✓
18✓ 26 37 28 39✓ 29✓ 39✓
18✓ 26 37 28 39✓ 29✓ 39✓
18✓ 26 37 28 39✓ 29✓ 39✓
18✓ 26 37 28 39✓ 29✓ 39✓
83 74 56 29✓ 34 94 92
22 33 83 29✓ 92 03 12
22 33 83 29✓ 92 03 12
83 74 56 29✓ 34 94 92
83 74 56 29✓ 34 94 92
22 33 83 29✓ 92 03 12
22 33 83 29✓ 92 03 12
83 74 56 29✓ 34 94 92
83 74 56 29✓ 34 94 92
22 33 83 29✓ 92 03 12
94 72 57 65 38 85 95
94 72 57 65 38 85 95
94 72 57 65 38 85 95
94 72 57 65 38 85 95
94 72 57 65 38 85 95

第二步

如果你的代码与文本文件一起正常工作,你可以继续解决你的第二个问题。

所有与RTF相关的项目似乎都很老了,不知道它们是否还能运作。 Yomu可能。

对于docx文件,名为docx的项目可以为您提供帮助。

作为替代方案,您可以编写一个HTML文件,Word也可以阅读。