簡體   English   中英

如何搜索具有不同組合的數組中的字符串中的單詞?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM