查找并打印完全匹配字符串或regexp(Ruby)的文件中的行

gra*_*ero 5 ruby regex file-io

在ruby 1.9.3中,我正在尝试编写一个程序,它将从任意一组字符中找到包含n个字符的所有单词.所以,例如,如果我给出了字符[b,a,h,s,v,i,e,y,k,s,a]和n = 5,我需要找到所有可以使用的5个字母的单词只使用那些字符.使用http://wordlist.sourceforge.net/中的2of4brif.txt单词列表(也包括英国单词和拼写),我尝试了以下代码:

a = %w[b a h s v i e y k s a]
a.permutation(5).map(&:join).each do |x|
  File.open('2of4brif.txt').each_line do |line|
    puts line if line.match(/^[#{x}]+$/)
  end
end
Run Code Online (Sandbox Code Playgroud)

这没有任何作用(没有错误消息,没有输出,就像冻结一样).我还尝试了基于以下线程的变体:

在文件中搜索字符串的最佳方法是什么?

Ruby在文件和打印结果中查找字符串

如何使用Ruby在文本文件中搜索完全匹配的字符串?

在与正则表达式匹配的文本文件中查找行

将内容与正则表达式匹配在文件中?

如何打开文件并搜索单词?

我尝试过的每一个变化都导致:

1)冷冻;

2)打印列表中包含5个字符排列的所有单词(我假设它正在做什么;我没有检查所有数千个打印的单词); 要么

3)打印列表中单词中发现的所有5个字符的排列(再次,我认为这是它正在做的事情).

同样,我不是在寻找包含 5个字符排列的单词,我正在寻找5个字符的排列,这些排列本身就是完整的单词,因此文本文件中的一行只有在打印时才能打印出来.完美匹配排列.

我究竟做错了什么?提前致谢!

Dav*_* S. 1

这适用于我使用该页面上的 english.0 文件(抱歉,我找不到您提到的特定文件):

a = %w[b a h s v i e y k s a l d n]
dict = {}
a.permutation(5).each do |p|
  dict[p.join('')] = true
end

File.open('english.0').each_line do |line|
  line.chomp!.downcase!
  puts line if dict[line]
end
Run Code Online (Sandbox Code Playgroud)

结构应该非常清晰 - 我在一个巨大的哈希中预先构建了排列字典(您可能需要根据输入大小重新访问它,但现在内存很便宜),然后我使用了输入是“的事实”每行一个单词”,只需键入该哈希值即可。

另请注意,在我的版本中,我只通读该文件一次。在您的文件中,您每次排列都会扫描一次文件,并且有数千种排列。