我想要一个正则表达式,它将提取快乐和良好的词,既不贪婪又不区分大小写.
@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)
您应该在轮换周围添加括号,以便\bs将应用于任一个happy或good作为一个单元:
\b(happy|good)\b
Run Code Online (Sandbox Code Playgroud)
然后,您可能希望扫描@a数组的每个元素而不是@a.joina map并flatten调用:
@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)
但在这种情况下它不会有任何区别.
| 归档时间: |
|
| 查看次数: |
306 次 |
| 最近记录: |