如何匹配字符串中的给定字符

时间:2016-02-07 04:15:04

标签: ruby string

假设:

fruits = %w[Banana Apple Orange Grape]
chars = 'ep'

如何打印fruits所有chars字符的所有元素?我尝试了以下方法:

fruits.each{|fruit| puts fruit if !(fruit=~/["#{chars}"]/i).nil?)}

但我在结果中看到'Orange',其中没有'p'字符。

7 个答案:

答案 0 :(得分:6)

p fruits.select { |fruit| chars.delete(fruit.downcase).empty? }
["Apple", "Grape"]

String#delete会返回chars的副本,并删除delete个参数中的所有字符。

答案 1 :(得分:4)

只是为了好玩,这里有你如何用正则表达式做到这一点,这要归功于积极前瞻的魔力:

fruits = %w[Banana Apple Orange Grape]
p fruits.grep(/(?=.*e)(?=.*p)/i)
# => ["Apple", "Grape"]

这很简洁,但正则表达式有点神秘,如果你想要概括它会变得更糟:

def match_chars(arr, chars)
  expr_parts = chars.chars.map {|c| "(?=.*#{Regexp.escape(c)})" }
  arr.grep(Regexp.new(expr_parts.join, true))
end

p match_chars(fruits, "ar")
# => ["Orange", "Grape"]

另外,我很确定这会大多数或所有其他答案都会超越。

答案 2 :(得分:3)

fruits = ["Banana", "Apple", "Orange", "Grape"]
chars = 'ep'.chars

fruits.select { |fruit| (fruit.split('') & chars).length == chars.length }

#=> ["Apple", "Grape"]

答案 3 :(得分:2)

if not exists (select 1 from ydata.dbo.entity
                    where NameID = @CurrentName)

要打印:

chars.each_char.with_object(fruits.dup){|e, a| a.select!{|s| s.include?(e)}}
# => ["Apple", "Grape"]

答案 4 :(得分:2)

我是一个绝对的初学者,但这里有什么对我有用

fruits = %w[Banana Apple Orange Grape] 
chars = 'ep'

fruits.each {|fruit| puts fruit if fruit.include?('e') && fruit.include?('p')}

答案 5 :(得分:2)

以下是另一种方法:

fruits.select {|f| chars.downcase.chars.all? {|c| f.downcase.include?(c)} }

答案 6 :(得分:1)

试试这个,首先将所有字符拆分成一个数组(chars.split("")),然后检查所有字符是否都存在于单词中。

fruits.select{|fruit| chars.split("").all? {|char| fruit.include?(char)}}
#=> ["Apple", "Grape"]