Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 匹配短语中的部分字符串_Ruby_Regex - Fatal编程技术网

Ruby 匹配短语中的部分字符串

Ruby 匹配短语中的部分字符串,ruby,regex,Ruby,Regex,我建立了一个内联网站点,通过.csv转储我们的客户数据库进行循环,并使用表单帮助查找账号 我想把我所有的关键字都当作通配符,但要尊重它们的顺序。例如,如果我有companyA:“Monograme Shope”和companyB:“mono Shop”,如果我在表单字段中键入“mono Shop”,我想返回A和B选项。该代码的作用是: company_lookup = company_lookup.split(" ") counter = company_lookup.length compa

我建立了一个内联网站点,通过.csv转储我们的客户数据库进行循环,并使用表单帮助查找账号

我想把我所有的关键字都当作通配符,但要尊重它们的顺序。例如,如果我有company
A
“Monograme Shope”
和company
B
“mono Shop”
,如果我在表单字段中键入
“mono Shop”
,我想返回
A
B
选项。该代码的作用是:

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,我也会得到这两个结果。在那里,我只想得到
B
结果


是否有任何方法可以使用正则表达式,例如在字符串中查找
PartialKeyword1
PartialKeyword2
,并在匹配时返回
true

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

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

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

如果性能是一个大问题,或者数据量很大,你最好尝试一些全文搜索引擎,例如如果不知道
公司查找
公司
是什么,就很难提供帮助。Arie下面的答案正是我需要的,但万一其他人需要这个来理解它。。。company_lookup是从web表单传递的字符串(在我的示例中为“mono shop”),company是我试图在其中查找“mono shop”的字符串(我在我的csv中遍历每个公司)。第[2]行是与“mono shop”字符串匹配的公司的帐号。谢谢,Arie Shaw。这是有道理的,而且效果很好。做出了改变,并在现场推动。谢谢你的提示斯芬克斯以及-如果这个csv变得更大,我会尝试一下。