我想要一个正则表达式,它将提取单词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
答案 0 :(得分:7)
您应该在轮换周围添加括号,以便\b
作为一个单元应用于happy
或good
:
\b(happy|good)\b
然后,您可能希望扫描@a
数组的每个元素而不是@a.join
,以便调用map
和flatten
:
@a.map { |s| s.scan(/\b(happy|good)\b/i) }.flatten
# ["HAppy", "happy", "good"]
您还可以使用非捕获组:
\b(?:happy|good)\b
但在这种情况下不会有任何区别。
答案 1 :(得分:0)
我认为你的意思是它既快乐,又不好。这是因为你在查看单词边界,当你加入字符串时它变成了goodsad。
删除单词边界条件,它应该按预期匹配。