使用用户输入搜索字符串

时间:2018-11-05 19:49:38

标签: ruby

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

 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”。 如何从字符串开头搜索?

3 个答案:

答案 0 :(得分:3)

使用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锚定在字符串的开头。

答案 1 :(得分:0)

其他选项,即使搜索仅限于首字母,也不区分大小写:

found = list.select { |x| [search_artist.downcase, search_artist.upcase].include? x[0] }
found.each { |e| puts e }
puts "Found #{found.size} records"

答案 2 :(得分:0)

没有正则表达式:

puts "Enter Artist(all or partial name):"   
search_artist = gets.chomp

puts list.select do |x|
  x.artist.start_with?(search_artist)
end