我有一个由我在另一个数组中搜索的几个字符串组成的数组,如下所示:
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",我想删除由{{{}组成的任何字符串1}} +一系列整数(无需手动添加数字后缀)。我试过这个:
string-
这不起作用,但这是我瞄准的逻辑。基本上,有没有办法在数组中包含像这样的正则表达式的字符串?或者是否有比执行该工作的strings_array = ["string1", "string2", "string3", /string-\d+/.to_s]
和.any?
组合更好的方法(无需输入完整的字符串值)?
感谢您的帮助!
答案 0 :(得分:2)
您可以使用 keep_if 和 delete_if 等方法,因此如果您要删除与正则表达式匹配的字符串,您可以执行以下操作:
array = ['string-123', 'test']
array.delete_if{|n| n[/string-\d+/] }
这将删除数组中与正则表达式不匹配的字符串。与keep_if方法相同。
希望它有所帮助!
答案 1 :(得分:1)
执行此操作的一个好方法是使用Regexp.union
,它将多个正则表达式组合到单个正则表达式中以便进行匹配。
patterns = [/pattern1/, /pattern2/, /string-\d+/]
regex = Regexp.union(patterns)
main_array.delete_if{|string| string.match(regex)}