两个字符串的正则表达式格式

时间:2012-05-21 02:12:14

标签: ruby regex

我想要一个正则表达式,它将提取单词happy and good,非贪婪且不区分大小写。

@a = [" I am very HAppy!!", "sad today..", "happy. to hear about this..", "the day is good", "sad one", "sad story"]

看起来这个用一个词:

@z = @a.join.scan(/\bhappy\b/i)

但是当我加入时,它并不像我期望的那样有用。

@z = @a.join.scan(/\bhappy|good\b/i) 

期待(快乐2x和好1x):

@z.size => 3

它给我的结果:

@z.size => 2

2 个答案:

答案 0 :(得分:7)

您应该在轮换周围添加括号,以便\b作为一个单元应用于happygood

\b(happy|good)\b

然后,您可能希望扫描@a数组的每个元素而不是@a.join,以便调用mapflatten

@a.map { |s| s.scan(/\b(happy|good)\b/i) }.flatten
# ["HAppy", "happy", "good"]

您还可以使用非捕获组:

\b(?:happy|good)\b

但在这种情况下不会有任何区别。

答案 1 :(得分:0)

我认为你的意思是它既快乐,又不好。这是因为你在查看单词边界,当你加入字符串时它变成了goodsad。

删除单词边界条件,它应该按预期匹配。