我对Ruby非常陌生,不知道为什么我的rspec挂起。我在下面给出的方法中有两个正则表达式。如果我也不这么认为,rspec就可以了。但是,如果两者都存在,则rspec挂起(链接到完整项目,包括测试,如果有助于提供上下文)
示例输入:
pairings= [["Joe Johnson", "Jane Johnson"], ["Sarah Smith", "Bob Jones"]]所需的输出:
self.valid_pairs?(pairings) => false ... because the last names in the pairings[0] are the same码
def self.valid_pairs?(pairings)
validated_pairings = []
pairings.each do |p|
match1 = /(\w*)\s(\w*)|(\w*)\s(\w*)\s(\w*)/.match(p[0]).to_a
match2 = /(\w*)\s(\w*)|(\w*)\s(\w*)\s(\w*)/.match(p[1]).to_a
if match1.last != match2.last
validated_pairings << p
else
end
end
if validated_pairings == pairings
true
else
false
end
end发布于 2014-08-27 16:52:50
您可以使用以下regex获取姓氏:
(\w+)$工作演示

要从捕获组获取内容,您可以这样做:
lastname = /(\w+)$/.match(p[0]).captures因此,对于:
lastname = /(\w+)$/.match("Sarah Smith").captures
// lastname => "Smith"我把编码留给你
发布于 2014-08-27 17:00:20
您不需要正则表达式来获取可以使用split的最后一个单词
match1 = p[0].split
match2 = p[1].split还可以通过使用all?来简化代码。
def self.valid_pairs?(pairings)
pairings.all? do |p1, p2|
p1.split.last != p2.split.last
end
end只有当pairings数组中的所有元素都返回true时,上述代码才返回true,因为这两个名称没有相同的姓氏。
发布于 2014-08-27 20:16:11
如果您的方法是:
def any_matching_last_names?(pairings)
pairings.any? { |p1,p2| p1.last_name == p2.last_name }
end其中,last_name以您喜欢的任何方式从p1和p2中提取姓氏(例如,p.split.last或p[/\w+$/] )。如果此方法返回pairings,则该方法将是“有效”的,因此您可以这样使用它:
list.add(pairings) unless any_matching_last_names?(pairings)https://stackoverflow.com/questions/25531708
复制相似问题