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”。如何从字符串的开头搜索?
解决方案
有一种非常简单的方法可以做到这一点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
锚定到字符串的开头。
推荐阅读
- java - Java Spring 引导控制器@RequestParam 给出错误“所需的字符串参数'名称'不存在”
- python - 如何在 Anaconda Prompt 中更改默认 conda 环境?
- node.js - npm install 失败并出现 apt-get update 错误 - 以下签名无效:XYZ
- django - Django 将模型的某个元素的某些字段设为只读
- linux - 嵌入式 Linux 设备的 SCEP 客户端
- svg - SVG
在阿拉伯语版本的网站上错位了吗? - java - JUnit 5 中的 @RuleChain 等价物是什么?
- java - 视频转码器编码器解码器无法返回原始缓冲区
- gitlab - GitLab git 克隆
- python - 在python中将多个文件压缩成一个bz2文件