匹配短语中的部分字符串

时间:2014-05-14 03:21:30

标签: ruby regex

我建立了一个内部网站点,它遍历我们客户数据库的.csv转储,并使用表单来帮助查找帐号。

我想将所有关键字视为外卡条款,但尊重其订单。例如,如果我有公司A"The Monogramme Shoppe"和公司B"Monograms & More at The Shop",我想返回AB选项,如果我在表单字段中键入"mono shop"。这段代码可以做到:

company_lookup = company_lookup.split(" ")

counter = company_lookup.length
company_lookup.each do |com|
  if company.downcase.include? com.downcase
    counter = counter - 1
  end
end
if counter == 0
  match_found = true
  account_number = row[2].to_s
  matches.push [account_number, company]
end

但如果我输入"mono the",我也会得到两个结果。在那里,我只想获得B结果。

有没有办法使用正则表达式,比如在字符串中查找PartialKeyword1PartialKeyword2,如果匹配则返回true

1 个答案:

答案 0 :(得分:0)

您可以使用以下代码构造正则表达式以匹配公司名称,然后使用此正则表达式查找匹配的记录。

company_lookup = company_lookup.split(" ").map{|r| Regexp.quote(r)}.join('.*?')

if company =~ /#{company_lookup}/i
  matches.push [row[2].to_s, company]
end

如果性能是一个大问题,或者数据量很大,您最好尝试一些全文搜索引擎,例如Thinking Sphinx