[英]How do I search for a word in a string which is in an array with different combinations?
我有一個類似的數組:
["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允許您使用正則表達式(regex)。
閱讀match()方法,我確定您會找到所需的東西。
在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
的原因很簡單,即獲取大量可能的目標,立即創建一種模式來搜索它們,然后搜索許多兆字節的文本以進行匹配,所有這些都以regex引擎的速度運行,而無需迭代。 它與我們在Ruby中搜索一樣快。
name[regex]
是生成真/假值的基礎。 將其更改為!!name[regex]
將返回布爾值true / false。
與其將其嵌入select
中以獲取命中名稱的select
,不如將其嵌入具有條件的循環中:
names.each do |name|
if name[regex]
puts "got a hit for '#{ name }'"
end
end
哪個輸出:
got a hit for 'Rob Meyer'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.