2017-09-26 28 views
0

我有一個數組由若干字符串,我在另一個數組搜索,像這樣的一個數組的正則表達式字符串:包括在

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- +一系列整數組成的字符串(無需手動添加數字後綴)。我試過這個:

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

這是行不通的,但這是我所追求的邏輯。基本上,有沒有辦法在數組中包含像這樣的正則表達式的字符串?或者有沒有比這個.any?include?組合更好的方法來完成這項工作(無需輸入完整的字符串值)?

謝謝你的幫助!

+0

你可以在你的'string_array'作爲一個正則表達式對待每一個項目,而不是'main_array.include?(x)的'你可以檢查是否'main_array [X]','x'是一個正則表達式,退貨'nil',在這種情況下沒有匹配。 – Oxfist

+0

因爲你有一個Ruby標籤,所以在標題中不需要「(ruby)」。 –

回答

0

一個很好的方法是使用Regexp.union,它將多個正則表達式組合成一個正則表達式用於匹配。

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

「Regexp.union」非常完美!它完全根據需要併入我的腳本的其餘部分。非常感謝! – lumos

2

您可以像使用keep_ifdelete_if方法,所以如果你想刪除匹配正則表達式的字符串,你可以做這樣的事情:

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

這將刪除該字符串數組中這與您的正則表達式不匹配。與keep_if方法相同的東西。

希望它有幫助!