【问题标题】:Include a regex string in an array在数组中包含正则表达式字符串
【发布时间】:2018-03-08 05:04:48
【问题描述】:

我有一个由多个字符串组成的数组,我在另一个数组中搜索,如下所示:

strings_array = ["string1", "string2", "string3"]
main_array = [ ## this is populated with string values outside of my script ## ]

main_array.each { |item|
  if strings_array.any? { |x| main_array.include?(x) }
    main_array.delete(item)
  end
}

这是我的脚本实际执行的简化版本,但这就是要点。它按原样工作,但我想知道如何使strings_array 可以包含由正则表达式制成的字符串。所以假设我在main_array 中有一个名为“string-4385”的字符串,我想删除由string- + 一系列整数组成的 any 字符串(无需手动添加数字后缀)。我试过这个:

strings_array = ["string1", "string2", "string3", /string-\d+/.to_s]

这行不通,但这是我的目标逻辑。基本上,有没有办法在数组中包含这样的正则表达式字符串?还是有比 .any?include? 组合更好的方法来完成这项工作(无需输入完整的字符串值)?

感谢您的帮助!

【问题讨论】:

  • 您可以将string_array 中的每个项目都视为正则表达式,而不是main_array.include?(x),您可以检查main_array[x]x 是否是正则表达式,返回nil,在这种情况下没有匹配项。
  • 标题中不需要“(ruby)”,因为你有一个 Ruby 标签。

标签: arrays ruby regex


【解决方案1】:

一个很好的方法是使用Regexp.union,它将多个正则表达式组合成一个方便匹配的正则表达式。

patterns = [/pattern1/, /pattern2/, /string-\d+/]
regex = Regexp.union(patterns)
main_array.delete_if{|string| string.match(regex)}

【讨论】:

  • "Regexp.union" 是完美的!它完全根据需要合并到我的脚本的其余部分中。非常感谢!
【解决方案2】:

您可以使用 keep_ifdelete_if 等方法,因此如果您想删除与正则表达式匹配的字符串,您可以执行以下操作:

array = ['string-123', 'test']
array.delete_if{|n| n[/string-\d+/] }

这将删除数组中与您的正则表达式不匹配的字符串。与 keep_if 方法相同。

希望对你有帮助!

【讨论】:

    猜你喜欢
    • 2011-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    • 2012-05-11
    • 1970-01-01
    • 1970-01-01
    • 2021-11-01
    相关资源
    最近更新 更多