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

chi*_*ief 2 ruby regex

我想要一个正则表达式,它将提取快乐和良好的词,既不贪婪又不区分大小写.

@a = [" I am very HAppy!!", "sad today..", "happy. to hear about this..", "the day is good", "sad one", "sad story"]
Run Code Online (Sandbox Code Playgroud)

看起来这个用一个词:

@z = @a.join.scan(/\bhappy\b/i)
Run Code Online (Sandbox Code Playgroud)

但是,当我加入它时它不会像我期望的那样起作用.

@z = @a.join.scan(/\bhappy|good\b/i) 
Run Code Online (Sandbox Code Playgroud)

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

@z.size => 3
Run Code Online (Sandbox Code Playgroud)

结果它给了我:

@z.size => 2
Run Code Online (Sandbox Code Playgroud)

mu *_*ort 7

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

\b(happy|good)\b
Run Code Online (Sandbox Code Playgroud)

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

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

您还可以使用非捕获组:

\b(?:happy|good)\b
Run Code Online (Sandbox Code Playgroud)

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