【问题标题】:Using arrays in regular expressions?在正则表达式中使用数组?
【发布时间】:2023-03-22 19:00:02
【问题描述】:

有谁知道是否有办法在正则表达式中使用数组?假设我想知道somefile.txt 是否包含数组元素之一。显然下面的代码不起作用,但是有类似的东西起作用吗?

array = [thing1 thing2 thing3]
file = File.open("somefile.txt")

file.each_do |line|
if /array/.match(line)
puts line
end

基本上我有一个文件,其中包含我需要在另一个大文件中用作搜索词的单词列表,我想避免这样的事情:

($somefile =~ /(thing1|thing2|thing3)/)

【问题讨论】:

  • 您对问题的陈述是错误的。您不想在正则表达式中使用数组,而是想在正则表达式中表达替代方案(以数组形式给出)。
  • 但我想我确实想使用数组?基本上我有一个文件,其中包含我需要在另一个大文件中用作搜索词的单词列表。

标签: arrays ruby regex


【解决方案1】:

您可以使用Regexp.union,它返回一个匹配任何给定正则表达式的Regexp。参数模式可以是StringRegexp

Regexp.union(%w(thing1 thing2 thing3))
#=> /thing1|thing2|thing3/

Regexp.union(/thing1/, /thing2/, /thing3/)
#=> /(?-mix:thing1)|(?-mix:thing2)|(?-mix:thing3)/

【讨论】:

  • 我可以使用数组的内容以某种方式填充 regexp.union 吗?
  • @RachaelHardison 你的意思是Regexp.union(array)?没问题,试试看。
【解决方案2】:

用途:

x = ['qwe', 'asd', 'zxc']
file = File.open("somefile.txt")
regexp = /(#{x.join '|'})/
file.each_do |line|
  puts line if regexp.match(line)
end

【讨论】:

  • 谢谢,我更接近了!但是,我想我在这里遗漏了一些东西。当我运行它时,它实际上并没有输出任何东西,它只是移动到下一个命令行,所以我认为它有效,但没有打印任何东西?
猜你喜欢
  • 1970-01-01
  • 2020-09-14
  • 2011-01-26
  • 2022-12-06
  • 2017-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多