1

だから私は1つの単語のキーワードをうまく見つける方法を知っています:

text =~ /keyword1|keyword2|keyword3/i

しかし、どうすればフレーズを見つけることができますか?例:「空は青い……でも時々オレンジに変わる」

私はやってみました:

text =~ /(the sky is blue)|(orange sky)|(sky is blue but orange)/i

しかし、それはうまくいきませんでした。

考え?基本的に、スペースで区切られたいくつかのキーワードをつなぎ合わせて、それらのフレーズに対応するテキストを見つけるにはどうすればよいですか?

4

2 に答える 2

3

\s他の空白文字を気にしない場合は、スペースの代わりに使用してください。ただし、スペース文字のみを照合する必要がある場合は、スペース記号(\u0020)のコードを使用できます。

text =~ /(the\u0020sky\u0020is\u0020blue)|(orange\u0020sky)|(sky\u0020is\u0020blue\u0020but\u0020orange)/i
于 2012-05-15T14:43:24.410 に答える
3

「うまくいかなかった」とはどういう意味かわかりません。=~正規表現が一致を見つけたインデックスを返します。

"The sky is blue....but sometimes it turns to orange." =~ /(the sky is blue)|(orange sky)|(sky is blue but orange)/i
# => 0

0「空は青い」が一致したインデックスです。一致するものが見つからない場合はを=~返しますnil0は「truthy」であり、Rubyでは「falsey」であるため、一致の結果をステートメントnilで使用できます。if

それらがあなたが探している正確なフレーズである場合、あなたの既存の正規表現はうまく機能するはずです。

"The sky is green....but sometimes it turns to orange sky." =~ /(the sky is blue)|(orange sky)|(sky is blue but orange)/i
# => 46

正規表現を実行する前に、 String#squeezeメソッドを使用して複数のスペースを削除できます。

"The sky is green....but sky is blue      but orange sometimes.".squeeze!(" ") =~ /(the sky is blue)|(orange sky)|(sky is blue but orange)/i
# => 24

それは役に立ちますか?

于 2012-05-15T15:04:41.953 に答える