gpt4 book ai didi

ruby - 在文件中查找并打印与字符串或正则表达式完全匹配的行 (Ruby)

转载 作者:数据小太阳 更新时间:2023-10-29 07:17:51 26 4
gpt4 key购买 nike

在 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

这什么都不做(没有错误信息,没有输出,就像卡住了一样)。我还尝试了基于以下主题的变体:

What's the best way to search for a string in a file?

Ruby find string in file and print result

How to search for exact matching string in a text file using Ruby?

Finding lines in a text file matching a regular expression

Match a content with regexp in a file?

How to open a file and search for a word?

我尝试过的每个变体都会导致:

1)卡住;

2) 打印列表中包含 5 个字符排列的所有单词(我假设这就是它正在做的;我没有仔细检查所有打印的数千个单词);或

3) 打印在列表中的单词中找到的所有 5 个字符的排列(同样,我假设它正在做的事情)。

同样,我不是在寻找包含 5 个字符排列的单词,我在寻找本身就是完整单词的 5 个字符排列,所以在只有与排列完美匹配的文本文件才应打印。

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

最佳答案

您实际上并没有在这里使用正则表达式。你的程序效率很低,不仅因为你要为每个单一排列重新打开文件,正如已经指出的那样(而且有 55k!);但最重要的是因为你想做的就是

/^[bahsvieyksa]{5}$/

对于文件的每一行。

因此我建议:

File.open('2of4brif.txt').each_line do |line|
puts line if line.match(/^[bahsvieyksa]{5}$/)
end

作为一个更有效的替代方案

关于ruby - 在文件中查找并打印与字符串或正则表达式完全匹配的行 (Ruby),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14982305/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com