我正在尝试编写一个方法来提取与大文本文件中的条件匹配的每个字符串:
我的代码:
#this string should be returned by the regex matching
str="3,15,14,31,40,5,5,4,5,3,4,4,5,2,2,2,1,2,1,1,3,3,3,2,4,3,false,false,false,false,false,true,false,true,false,false,false,false,false,false,false,true,false,false,false,false,false,false,false,false,false,false,false,3,3,3,2,3"
matchResult=/[1-59]{5}[1-5]{21}[true|false]{27}[1-5]{5}/.match(str)
matchResult.each{|x| #this doesnt work....why?
puts x
}
matchResult.each
抛出错误。我以为它返回了一系列匹配。答案 0 :(得分:1)
将true或false置于捕获组或非捕获组(如(?:true|false)
)内,以使其与确切的true
或false
子字符串匹配,此[true|false]
将匹配一个字符,只能是t
或r
或u
或e
或|
,....
> str="3,15,14,31,40,5,5,4,5,3,4,4,5,2,2,2,1,2,1,1,3,3,3,2,4,3,false,false,false,false,false,true,false,true,false,false,false,false,false,false,false,true,false,false,false,false,false,false,false,false,false,false,false,3,3,3,2,3"
> str.match(/^(?:[1-5]\d|[1-9])(?:,(?:[1-5]\d|[1-9])){4}(?:,[1-5]){21}(?:,(?:true|false)){27}(?:,[1-5]){5}$/)
=> #<MatchData "3,15,14,31,40,5,5,4,5,3,4,4,5,2,2,2,1,2,1,1,3,3,3,2,4,3,false,false,false,false,false,true,false,true,false,false,false,false,false,false,false,true,false,false,false,false,false,false,false,false,false,false,false,3,3,3,2,3">
答案 1 :(得分:1)
关于你的第一个问题:
&#34;打印所有比赛的正确方法是什么? matchResult.each抛出错误。我以为它返回了一系列匹配。&#34;
正则表达式.match
方法不会返回匹配数组;它返回一个匹配对象(在这种情况下,一个字符串,因为你在字符串上调用.match
)或者如果没有匹配(see docs here)则返回nil。
这意味着matchResult
是一个字符串,您无法在字符串上调用.each
,这就是您收到错误消息的原因。有关.each
&amp;的更多信息,请参阅this post字符串。