我有一个数组是这样的:如何搜索字符串中的单词,该单词是以不同组合的数组进行搜索的?
["Rob Meyer", "Michelle Preston"]
我要搜索的rob or Rob, or meyer or Meyer
发生等,在数组中任一“字”,没有字符,但只是说说而已,不区分大小写。
那么我该怎么做? include?
寻找完全匹配。我在这里寻找更灵活的东西。
我有一个数组是这样的:如何搜索字符串中的单词,该单词是以不同组合的数组进行搜索的?
["Rob Meyer", "Michelle Preston"]
我要搜索的rob or Rob, or meyer or Meyer
发生等,在数组中任一“字”,没有字符,但只是说说而已,不区分大小写。
那么我该怎么做? include?
寻找完全匹配。我在这里寻找更灵活的东西。
这是你在找什么?
query = 'rob'
["Rob Meyer", "Michelle Preston"].any?{|e| e =~ /\b#{query}\b/i}
预编译单词列表。
words = ["Rob Meyer", "Michelle Preston"].flat_map{|s| s.downcase.scan(/\w+/)}
words.include?("Rob".downcase) # => true
看起来好像您正在寻找匹配操作。 Ruby允许你使用正则表达式(正则表达式)。
阅读匹配()方法,我相信你会找到你需要的。
在Ruby中使用正则表达式时,使用“/ i”后面的表达式会使其不区分大小写。
我通常会去http://ruby-doc.org/找到Ruby语言细节。
祝你好运!
我做这样的事情经常:
names = ["Rob Meyer", "Michelle Preston"]
targets = %w[rob meyer]
regex = /\b(?:#{ Regexp.union(targets).source })\b/i
# => /\b(?:rob|meyer)\b/i
names.select{ |name| name[regex] }
它返回命中名称数组:
[ [0] "Rob Meyer" ]
我用Regexp.union
是是微不足道的承担着巨大的名单的原因可能的目标,立即创建一个模式来搜索它们,然后搜索许多兆字节的文本,所有文本都以正则表达式引擎的速度运行,无需迭代。它的速度与我们在Ruby中搜索的速度一样快。
name[regex]
是产生真/假值的基础。将其更改为!!name[regex]
将返回一个布尔值true/false值。
而是在select
其抓住一击的名字嵌入它的,它可以在一个循环中完成一个条件:
names.each do |name|
if name[regex]
puts "got a hit for '#{ name }'"
end
end
,输出:
got a hit for 'Rob Meyer'
是的,但我想它返回true或false。谢谢。 – psharma 2013-05-02 12:48:27
相应地更新了我的回答 – MoMolog 2013-05-02 12:52:00
当数组为'[“robber”]且搜索字符串为“Rob”时,这将返回true。 – sawa 2013-05-02 12:53:23