2

幸せと良いという言葉を抽出する正規表現が必要です。どちらも貪欲ではなく、大文字と小文字は区別されません。

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

これは1つの単語で機能するように見えます:

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

しかし、私が良いものを追加すると、それは私が期待するようには機能しません。

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

期待する(幸せな2倍と良い1倍):

@z.size => 3

それが私に与える結果:

@z.size => 2
4

2 に答える 2

7

sがいずれかに、または1つの単位として\b適用されるように、交互に括弧を追加する必要があります。happygood

\b(happy|good)\b

次に、配列の各要素をスキャンするのではなく、スキャンする必要が@aあります。@a.joinmapflatten

@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 に答える