0

假设我构建了一个这样的数组:

: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.

我很确定这可能是我只是不知道要搜索什么。如果您知道答案,可以将我链接到文档。

4

2 回答 2

3

您正在寻找的是正则表达式匹配。Ruby regexp 对象将帮助您。你想要的是像

/Q[\d+]P[\d+]/.match(name[2])

name[2]...如果有一个字符串匹配一个字符Q,一个或多个数字(0-9),一个字符P,然后一个或多个数字,它将返回一个真值。如果您想要的模式在这些数字空间中恰好有两位数字,这可能太灵活了;为此,您可以尝试更具体的模式:

/Q\d\dP\d\d/.match(name[2])
于 2013-06-21T15:09:20.023 回答
0

一种方法是通过正则表达式(简称“正则表达式”)。两个很好的信息来源是正则表达式.info和更以 Ruby 为中心的Rubular 。

在字符串上使用正则表达式的一种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情况下很有帮助,因为返回的字符串是“真实的”并且nil是“错误的”。

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 和 P/Q\d\dP\d\d/是大写字母。如果大小写不重要,您可以附加一个“i”以不区分大小写。/Q\d\dP\d\d/i将捕获“Q42P67”和“q42P67”

于 2013-06-21T15:16:33.663 回答