我有这个为我的阵列工作:
my_arr.delete_if{|x| x=~/achievement\..*?/}
它删除数组中与模式achievement.
匹配的所有字符串。是否有类似的单行反向(仅接受包含achievement.
的字符串?
答案 0 :(得分:5)
使用Array#keep_if代替#delete_if
my_arr.keep_if{|x| x=~/achievement\..*?/}
答案 1 :(得分:2)
无需修改正则表达式,您可以使用Array#keep_if
。
my_arr.keep_if{|x| x=~/achievement\..*?/}
答案 2 :(得分:1)
好的,更好的解决方案肯定是使用keep_if
。
OP询问是否有办法
只接受包含“成就”的字符串。
所以是的,再次不是最好的方法,但你可以使用否定前瞻:(?!exp)
:
my_arr.delete_if{|x| x=~/(?!achievement\..*?)/}
仍在使用delete_if
的另一个选择是使用“not equals matching”运算符(感谢@Cary):
my_arr.delete_if{|x| x!~/achievement\..*?/}
再次感谢@Cary,指出在任何人的代码中都找不到令人愉快的逻辑,所以请使用keep_if