gpt4 book ai didi

ruby - 比较匹配字符串的数组

转载 作者:数据小太阳 更新时间:2023-10-29 08:39:36 24 4
gpt4 key购买 nike

我有一个脚本可以远程登录到一个盒子中,运行一个命令,然后保存输出。之后我运行另一个脚本来解析输出文件,将其与位于另一个文件中的关键字进行比较以进行匹配。如果一行匹配,它应该将整行(从原始的 telnet 输出)保存到一个新文件中。

这是处理解析文本的脚本部分:

def parse_file
filter = []
temp_file = File.open('C:\Ruby193\scripts\PARSED_TRIAL.txt', 'a+')
t = File.open('C:\Ruby193\scripts\TRIAL_output_log.txt')
filter = File.open('C:\Ruby193\scripts\Filtered_text.txt').readlines
t.each do |line|
filter.each do |segment|
if (line =~ /#{segment}/)
temp_file.puts line
end
end
end
t.close()
temp_file.close()
end

目前,它仅保存位于数组 filter 中的最后运行字符串并将其保存到 temp_file。看起来循环并没有运行数组中的所有字符串,或者没有将它们全部保存。我在文本文件 Filtered_text.txt 中放置了五个字符串。它只将我最后匹配的行打印到 temp_file 中。

最佳答案

此(未经测试的代码)将复制原始代码,只是更加简洁和惯用:

filter = Regexp.union(File.open('C:\Ruby193\scripts\Filtered_text.txt').readlines.map(&:chomp))
File.open('C:\Ruby193\scripts\PARSED_TRIAL.txt', 'a+') do |temp_file|
File.foreach('C:\Ruby193\scripts\TRIAL_output_log.txt') do |l|
temp_file.puts l if (l[filter])
end
end

让您了解正在发生的事情:

Regexp.union(%w[a b c])
=> /a|b|c/

这为您提供了一个正则表达式,它将遍历字符串以查找任何子字符串匹配项。这是区分大小写的搜索。

如果你想关闭这些洞,使用类似的东西:

Regexp.new(
'\b' + Regexp.union(
File.open('C:\Ruby193\scripts\Filtered_text.txt').readlines.map(&:chomp)
).source + '\b',
Regexp::IGNORECASE
)

使用与上面相同的示例输入数组将导致:

/\ba|b|c\b/i

关于ruby - 比较匹配字符串的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13018048/

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