2

我想要一个正则表达式来提取快乐和好这两个词,既不贪婪又不区分大小写。

@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
4

2 回答 2

7

您应该在您的交替周围添加括号,以便\bs 将适用于其中一个happygood作为一个单位:

\b(happy|good)\b

然后,您可能想要扫描@a数组的每个元素,而不是@a.join这样 amap并被flatten要求:

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

您还可以使用非捕获组:

\b(?:happy|good)\b

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

于 2012-05-21T02:32:17.373 回答
0

我假设你的意思是它匹配两个快乐,但不好。这是因为您正在查看单词边界,并且当您加入字符串时,它变成了goodsad。

删除单词边界条件,它应该符合预期。

于 2012-05-21T02:31:28.280 回答