使用正则表达式拒绝数组中的项目的语法

时间:2015-05-22 21:03:10

标签: ruby regex regex-negation

我有这个为我的阵列工作:

my_arr.delete_if{|x| x=~/achievement\..*?/}

它删除数组中与模式achievement.匹配的所有字符串。是否有类似的单行反向(仅接受包含achievement.的字符串?

3 个答案:

答案 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