簡體   English   中英

如何在Ruby中為多個單詞/短語編寫正則表達式?

[英]How do I write a regular expression for multiple words/phrases in Ruby?

所以我知道如何找到一個單詞的關鍵字就好了:

text =~ /keyword1|keyword2|keyword3/i

但是我如何找到短語? 例如:“天空是藍色的。。。。但是有時它變成了橙色。”

我試着做:

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

但這沒用。

有什么想法嗎? 基本上,我如何將多個用空格隔開的關鍵字串在一起,並能夠找到與這些短語相對應的文本?

如果您不關心其他空格字符,請使用\\s代替空格。 但是,如果需要匹配空格字符,則可以使用空格符號( \ )的代碼:

text =~ /(the\u0020sky\u0020is\u0020blue)|(orange\u0020sky)|(sky\u0020is\u0020blue\u0020but\u0020orange)/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 在Ruby中, 0是“ 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

有幫助嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM