我的目标是让用户输入字符串以在数组中查找字符串。我正在使用字符串包括吗?函数进行搜索,但返回错误数据。
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”。 如何从字符串开头搜索?
答案 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