1

所以我知道如何找到一个单词关键字就好了:

text =~ /keyword1|keyword2|keyword3/i

但是我如何找到短语?例如“天空是蓝色的......但有时它会变成橙色。”

我试着做:

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

但这没有用。

想法?基本上,我如何将多个由空格分隔的关键字串在一起,并能够找到与这些短语相对应的文本?

4

2 回答 2

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在 Ruby 中是“真”和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 回答
3

\s如果您不关心其他空白字符,请使用代替空格。但是,如果您只需要匹配空格字符,则可以使用空格符号 ( \u0020) 的代码:

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