Ruby 检查哈希键是否出现在一行中

Ruby 检查哈希键是否出现在一行中,ruby,hash,Ruby,Hash,我试图逐行遍历一个文件,如果该行包含哈希键,我想打印该值。例如: Months = { "January" => 1, "February" => 2, "March" => 3 } 如果我有一个包含以下内容的文件: February January March 我希望输出为: 2 1 3 谁能给我一些快速建议吗?假设以下数据结构: months = { "January" => 1, "February

我试图逐行遍历一个文件,如果该行包含哈希键,我想打印该值。例如:

Months = { "January" => 1,
           "February" => 2,
           "March" => 3
         }
如果我有一个包含以下内容的文件:

February
January
March
我希望输出为:

2
1
3

谁能给我一些快速建议吗?

假设以下数据结构:

months = { "January" => 1, "February" => 2, "March" => 3 }

File.open('yourfile.txt').each_line do |line|
  result = months[line.strip]
  puts result if result
end
data = 'Months = { "January" => 1,
  "February" => 2,
  "March" => 3
}'
这将扫描它以查找与月份名称关联的数字:

months_to_find = %w[January February March]
months_re = Regexp.new(
  '(%s) .+ => \s+ (\d+)' % months_to_find.join('|'), 
  Regexp::IGNORECASE | Regexp::EXTENDED
)
Hash[*data.scan(months_re).flatten]['January'] # => 1
奇迹就发生在这里:

months_re = Regexp.new(
  '(%s) .+ => \s+ (\d+)' % months_to_find.join('|'), 
  Regexp::IGNORECASE | Regexp::EXTENDED
)
这将创建此正则表达式:

/(January|February|March) .+ => \s+ (\d+)/ix
将其他月份添加到
查找月份

如果数据更改为:

data = 'Months = { "The month is January" => 1,
  "The month is February" => 2,
  "The month is March" => 3
}'

假设以下数据结构:

data = 'Months = { "January" => 1,
  "February" => 2,
  "March" => 3
}'
这将扫描它以查找与月份名称关联的数字:

months_to_find = %w[January February March]
months_re = Regexp.new(
  '(%s) .+ => \s+ (\d+)' % months_to_find.join('|'), 
  Regexp::IGNORECASE | Regexp::EXTENDED
)
Hash[*data.scan(months_re).flatten]['January'] # => 1
奇迹就发生在这里:

months_re = Regexp.new(
  '(%s) .+ => \s+ (\d+)' % months_to_find.join('|'), 
  Regexp::IGNORECASE | Regexp::EXTENDED
)
这将创建此正则表达式:

/(January|February|March) .+ => \s+ (\d+)/ix
将其他月份添加到
查找月份

如果数据更改为:

data = 'Months = { "The month is January" => 1,
  "The month is February" => 2,
  "The month is March" => 3
}'

啊哈。谢谢你。我忘了提到的是,我的行上有多个字符。有没有一个快速修复代码可以用上面的代码来修复这个问题?例如,如果行中包含“月份为2月,月份为1月,月份为3月”,则在不同的lines@JaronBradley,这个评论毫无意义。“我的行上有多个字符”是什么意思?我们需要在你的问题中看到一些例子,展示你的数据可能出现的各种方式。@JaronBradley,不确定你的数据文件,但这里有一些可能的修复方法。谢谢你。我忘了提到的是,我的行上有多个字符。有没有一个快速修复代码可以用上面的代码来修复这个问题?例如,如果行中包含“月份为2月,月份为1月,月份为3月”,则在不同的lines@JaronBradley,这个评论毫无意义。“我的行上有多个字符”是什么意思?我们需要在您的问题中看到一些示例,显示您的数据可能以各种方式显示。@JaronBradley,不确定您的数据文件,但这里有一些可能的修复方法