所以我知道如何找到一个单词关键字就好了:
text =~ /keyword1|keyword2|keyword3/i
但是我如何找到短语?例如“天空是蓝色的......但有时它会变成橙色。”
我试着做:
text =~ /(the sky is blue)|(orange sky)|(sky is blue but orange)/i
但这没有用。
想法?基本上,我如何将多个由空格分隔的关键字串在一起,并能够找到与这些短语相对应的文本?
我不确定您所说的“那不起作用”是什么意思。=~
返回正则表达式找到匹配项的索引:
"The sky is blue....but sometimes it turns to orange." =~ /(the sky is blue)|(orange sky)|(sky is blue but orange)/i
# => 0
0
是“天空是蓝色的”找到匹配项的索引。如果未找到匹配项,则=~
返回nil
。0
在 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
这有帮助吗?
\s
如果您不关心其他空白字符,请使用代替空格。但是,如果您只需要匹配空格字符,则可以使用空格符号 ( \u0020
) 的代码:
text =~ /(the\u0020sky\u0020is\u0020blue)|(orange\u0020sky)|(sky\u0020is\u0020blue\u0020but\u0020orange)/i