首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rspec测试挂起regex

Rspec测试挂起regex
EN

Stack Overflow用户
提问于 2014-08-27 15:52:53
回答 3查看 76关注 0票数 0

我对Ruby非常陌生,不知道为什么我的rspec挂起。我在下面给出的方法中有两个正则表达式。如果我也不这么认为,rspec就可以了。但是,如果两者都存在,则rspec挂起(链接到完整项目,包括测试,如果有助于提供上下文)

示例输入:

代码语言:javascript
复制
pairings= [["Joe Johnson", "Jane Johnson"], ["Sarah Smith", "Bob Jones"]]

所需的输出:

代码语言:javascript
复制
self.valid_pairs?(pairings) => false ... because the last names in the pairings[0] are the same

代码语言:javascript
复制
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
EN

回答 3

Stack Overflow用户

发布于 2014-08-27 16:52:50

您可以使用以下regex获取姓氏:

代码语言:javascript
复制
(\w+)$

工作演示

要从捕获组获取内容,您可以这样做:

代码语言:javascript
复制
lastname = /(\w+)$/.match(p[0]).captures

因此,对于:

代码语言:javascript
复制
lastname = /(\w+)$/.match("Sarah Smith").captures
// lastname => "Smith"

我把编码留给你

票数 0
EN

Stack Overflow用户

发布于 2014-08-27 17:00:20

您不需要正则表达式来获取可以使用split的最后一个单词

代码语言:javascript
复制
match1 = p[0].split
match2 = p[1].split

还可以通过使用all?来简化代码。

代码语言:javascript
复制
def self.valid_pairs?(pairings)
  pairings.all? do |p1, p2|
    p1.split.last != p2.split.last
  end
end

只有当pairings数组中的所有元素都返回true时,上述代码才返回true,因为这两个名称没有相同的姓氏。

票数 0
EN

Stack Overflow用户

发布于 2014-08-27 20:16:11

如果您的方法是:

代码语言:javascript
复制
def any_matching_last_names?(pairings)
  pairings.any? { |p1,p2| p1.last_name == p2.last_name }
end

其中,last_name以您喜欢的任何方式从p1p2中提取姓氏(例如,p.split.lastp[/\w+$/] )。如果此方法返回pairings,则该方法将是“有效”的,因此您可以这样使用它:

代码语言:javascript
复制
list.add(pairings) unless any_matching_last_names?(pairings)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25531708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档