的问题是每一个重复串是否正则表达式匹配。据我所知,子字符由字符|
或$/
分隔,后者是一行的结尾。我们首先需要获得重复的子串:
a = str.split(/[#{$/}\|]/)
.map(&:strip)
.group_by {|s| s}
.select {|_,v| v.size > 1 }
.keys
接下来我们指定你希望使用的任何正则表达式。我假设它是这样的:
REGEX = /[1-9][0-9]*=[1-9]+\.[0-9]+/
但它可以改变,如果你有其他要求。
我们希望,以确定是否所有的重复子串匹配的正则表达式,即简单地说:
a.all? {|s| s =~ REGEX}
这里是算了一笔账:
str =<<_
1=23.00|6=22.12|12=21.34|112=20.34
1=23.00|6=22.12|12=21.34
1=23.00|12=21.34
1=23.00**
_
c = str.split(/[#{$/}\|]/)
#=> ["1=23.00", "6=22.12", "12=21.34", "112=20.34", "1=23.00",
# "6=22.12", "12=21.34", "1=23.00", "12=21.34", "1=23.00**"]
d = c.map(&:strip)
# same as c, possibly not needed or not wanted
e = d.group_by {|s| s}
# => {"1=23.00" =>["1=23.00", "1=23.00", "1=23.00"],
# "6=22.12" =>["6=22.12", "6=22.12"],
# "12=21.34" =>["12=21.34", "12=21.34", "12=21.34"],
# "112=20.34"=>["112=20.34"], "1=23.00**"=>["1=23.00**"]}
f = e.select {|_,v| v.size > 1 }
#=> {"1=23.00"=>["1=23.00", "1=23.00" , "1=23.00"],
# "6=22.12"=>["6=22.12", "6=22.12"],
# "12=21.34"=>["12=21.34", "12=21.34", "12=21.34"]}
a = f.keys
#=> ["1=23.00", "6=22.12", "12=21.34"]
a.all? {|s| s =~ REGEX}
#=> true
这个返回TRUE为'S =“21 = 23.00 | 22 = 23.00“'和's =”6 ='猫'| 6 ='猫'“'。 –