首页 > 解决方案 > 使用用户输入搜索字符串

问题描述

我的目标是让用户输入一个字符串以在数组中查找一个字符串。我使用字符串包括?功能进行搜索,但它返回错误的数据。

 puts "Enter Artist(all or partial name):"   
 search_artist = gets.chomp
 list.each do |x|
     if x.artist.include? (search_artist)
       num += 1
       x.to_s
     else
       puts "none found"
     end   end

search_artist = 'a' (因为我在找 AARON...)

返回:

AARON KDL NOT VALID 2
ZAC CHICKEN ROCK 1289
2 records found

应该:

AARON KDL NOT VALID 2     
1 record found`

问题是两个字符串都在字符串的某处包含“a”。如何从字符串的开头搜索?

标签: ruby

解决方案


有一种非常简单的方法可以做到这一点grep

matches = list.grep(search_artist)

if (matches.empty?)
  puts "none found"
end

要计算匹配数,您只需matches.length.

如果你想要一个不区分大小写的匹配,那么你想要这个:

matches = list.grep(Regexp.new(search_artist, Regexp::IGNORECASE))

该标志创建一个不区分大小写的正则表达式以进行更广泛的匹配。

编辑:将此搜索锚定到字符串的开头:

matches = list.grep(Regexp.new('\A' + Regexp.escape(search_artist), Regexp::IGNORECASE))

在哪里\A锚定到字符串的开头。


推荐阅读