在陣列項目我有這個工作對我的數組:語法拒絕與正則表達式
my_arr.delete_if{|x| x=~/achievement\..*?/}
它刪除匹配模式的achievement.
陣列中的所有字符串。是否有一個相似的襯墊做反向(只接受包含achievement.
字符串?
在陣列項目我有這個工作對我的數組:語法拒絕與正則表達式
my_arr.delete_if{|x| x=~/achievement\..*?/}
它刪除匹配模式的achievement.
陣列中的所有字符串。是否有一個相似的襯墊做反向(只接受包含achievement.
字符串?
使用Array#keep_if代替#delete_if
my_arr.keep_if{|x| x=~/achievement\..*?/}
不錯,比@Yu提出的要好得多。 –
我知道,看不到這會怎麼樣... –
好,更好的解決方案肯定是使用keep_if
。
的OP詢問是否有辦法
只接受字符串包含
所以,是的,又不是最好的方式,但你可以使用負前瞻「政績」:(?!exp)
:
my_arr.delete_if{|x| x=~/(?!achievement\..*?)/}
進一步的替代方案中,仍然使用delete_if
是使用「不等於匹配」運算符(感謝@Cary):
my_arr.delete_if{|x| x!~/achievement\..*?/}
再次,由於@Cary,用於指出這是不愉快的邏輯在任何人的代碼,以找到這麼使用keep_if
爲什麼你會喜歡這個簡單的'x!〜/ achievement \ .. *?/'? –
@CarySwoveland啊,我正在想這個語法,謝謝!添加。 – jcuenod
實際上,我並不是在暗示,如果條件不成立,刪除頭髮的呼吸就是保持相同的條件。當'select'已經被提出時,它與提示'reject'一樣 - 它不會添加任何東西。至於看起來,我不明白爲什麼會考慮這一點。 –
無需修改正則表達式,您可以使用Array#keep_if
。
my_arr.keep_if{|x| x=~/achievement\..*?/}
晚了7秒。 Yu,你失敗了。即使間距也是一樣的。你和@羅伯特有一個思想融合?除此之外,我更喜歡你的解決方案。 –
在您的搜索中沒有任何東西需要使用正則表達式,因爲它會減慢您的代碼。使用'x ['achievement。']'而不是因爲子字符串搜索比未錨定的正則表達式更快。 –
@TinMan,這只是一個例子。我有幾十個這些大多數需要正則表達式,雖然你是正確的,但這不是。 – Rilcon42