我正在尝试创建一个程序,我输入我的彩票号码,并将其与彩票公司提供的彩票号码相匹配。我想逐行阅读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匹配,然后突出显示文件上的每一行。甚至可能打印出带有突出显示数字的文件。
答案 0 :(得分:1)
您有两个不同的问题:
要获取中奖号码数组,您可以使用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也可以阅读。