所以我知道如何找到一个单词关键字就好了:
text =~ /keyword1|keyword2|keyword3/i
但我如何找到短语?例如。 “天空是蓝色的......但有时会变成橙色。”
我尝试过:
text =~ /(the sky is blue)|(orange sky)|(sky is blue but orange)/i
但这没效果。
思考?基本上,我如何将由空格分隔的多个关键字串在一起,并能够找到与这些短语相对应的文本?
答案 0 :(得分:3)
如果您不关心其他空格字符,请使用\s
而不是空格。
但是,如果您需要匹配仅空格字符,则可以使用空格符号代码(\u0020
):
text =~ /(the\u0020sky\u0020is\u0020blue)|(orange\u0020sky)|(sky\u0020is\u0020blue\u0020but\u0020orange)/i
答案 1 :(得分: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
是“天空是蓝色的”找到匹配的索引。如果未找到匹配项,则=~
会返回nil
。 0
在Ruby中是“truthy”而nil
是“falsey”,因此匹配的结果可以在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
这有帮助吗?