假设我构建了一个这样的数组:
:001 > holder = "This.File.Q99P84.Is.Awesome"
=> "This.File.Q99P84.Is.Awesome"
:002 > name = holder.split(".")
=> ["This", "File", "Q99P84", "Is", "Awesome"]
现在,我可以这样做:
name[2].include? 'Q99P84'
而不是放入'Q99P84',我想要输入'Q符号后面跟'
数字的符号,数字的符号,P的符号,数字的符号,数字的符号
所以.include?功能将是动态的。因此,我加载的任何具有Q ## P ##的文件名都将返回true
。
我很确定这可能是我不知道究竟要搜索什么。如果您知道答案,可以将我链接到文档。
答案 0 :(得分:3)
您正在寻找的是正则表达式匹配。 Ruby regexp object会帮助你。你想要的是像
/Q[\d+]P[\d+]/.match(name[2])
...如果name[2]
的字符串与字符Q
,一个或多个数字(0-9),字符P
匹配,则会返回真值一个或多个数字。如果你想要的模式在这些数字空格中只有两位数,那么匹配可能太灵活了;为此您可以尝试更具体的模式:
/Q\d\dP\d\d/.match(name[2])
答案 1 :(得分:0)
一种方法是通过正则表达式(简称“正则表达式”)。两个很好的信息来源是Regular Expression.info和Rubular,它们更加以Ruby为中心。
在字符串上使用正则表达式的一种方法是String#match
方法:
names[2].match(/Q\d\dP\d\d/) # /d stands for digit
如果匹配则返回字符串,如果没有则返回nil
。
"Q42P67".match(/Q\d\dP\d\d/) #=> "Q42P67"
"H33P55".match(/Q\d\dP\d\d/) #=> nil
这在if
条件下很有用,因为返回的字符串是'truthy'而nil
是'falsely'。
names[2] = "Q42P67"
if names[2].match(/Q\d\dP\d\d/)
# Will execute code here
end
names[2] = "H33P55"
if names[2].match(/Q\d\dP\d\d/)
# Will not execute code here
end
我希望这会有所帮助,直到你深入研究正则表达式。
修改强>
请注意/Q\d\dP\d\d/
中的Q和P是大写字母。如果情况不重要,您可以为不区分大小写添加“i”。 /Q\d\dP\d\d/i
将捕获“Q42P67”和“q42P67”