使用正则表达式拒绝数组中的项目的语法
syntax for rejecting items in array with regex
我的阵列有这个功能:
my_arr.delete_if{|x| x=~/achievement\..*?/}
它删除数组中与模式 achievement.
匹配的所有字符串。是否有类似的一行来做相反的事情(只接受包含 achievement.
?
的字符串
好吧,更好的解决办法肯定是用keep_if
.
OP询问是否有办法
only accept strings that contain "achievement."
所以是的,同样不是最好的方法,但你可以使用负前瞻:(?!exp)
:
my_arr.delete_if{|x| x=~/(?!achievement\..*?)/}
另一种选择,仍然使用 delete_if
是使用 "not equals matching" 运算符(感谢@Cary):
my_arr.delete_if{|x| x!~/achievement\..*?/}
再次感谢@Cary,指出在任何人的代码中都找不到这种令人愉快的逻辑,因此请使用 keep_if
使用Array#keep_if代替#delete_if
my_arr.keep_if{|x| x=~/achievement\..*?/}
不需要修改regex,可以使用Array#keep_if
.
my_arr.keep_if{|x| x=~/achievement\..*?/}
我的阵列有这个功能:
my_arr.delete_if{|x| x=~/achievement\..*?/}
它删除数组中与模式 achievement.
匹配的所有字符串。是否有类似的一行来做相反的事情(只接受包含 achievement.
?
好吧,更好的解决办法肯定是用keep_if
.
OP询问是否有办法
only accept strings that contain "achievement."
所以是的,同样不是最好的方法,但你可以使用负前瞻:(?!exp)
:
my_arr.delete_if{|x| x=~/(?!achievement\..*?)/}
另一种选择,仍然使用 delete_if
是使用 "not equals matching" 运算符(感谢@Cary):
my_arr.delete_if{|x| x!~/achievement\..*?/}
再次感谢@Cary,指出在任何人的代码中都找不到这种令人愉快的逻辑,因此请使用 keep_if
使用Array#keep_if代替#delete_if
my_arr.keep_if{|x| x=~/achievement\..*?/}
不需要修改regex,可以使用Array#keep_if
.
my_arr.keep_if{|x| x=~/achievement\..*?/}