我有一個數組是這樣的:如何搜索字符串中的單詞,該單詞是以不同組合的數組進行搜索的?
["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