Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
[Ruby]如何在一行字符串中搜索多个关键字_Ruby_Search_Keyword - Fatal编程技术网

[Ruby]如何在一行字符串中搜索多个关键字

[Ruby]如何在一行字符串中搜索多个关键字,ruby,search,keyword,Ruby,Search,Keyword,我对ruby是新手。我想知道如何在一行中找到是否存在多个关键字。例如,一行“Hello,你好吗?”,如果“Hello”或“how”退出,则返回true。 我尝试使用regexp,比如/Hello | how/,但是当有很多行要处理时,性能就不好了。 也许Regexp适合这个用例,但我在google中找不到具体的例子 谢谢你的帮助 keywords = { "Hello" => true, "how" => true, } 带有关键字的示例 "Hello, how are

我对ruby是新手。我想知道如何在一行中找到是否存在多个关键字。例如,一行“Hello,你好吗?”,如果“Hello”或“how”退出,则返回true。 我尝试使用regexp,比如/Hello | how/,但是当有很多行要处理时,性能就不好了。 也许Regexp适合这个用例,但我在google中找不到具体的例子

谢谢你的帮助

keywords = {
  "Hello" => true,
  "how" => true,
}
  • 带有关键字的示例

    "Hello, how are you?".scan(/\w+/).any?{|k| keywords.key?(k)}    # => true
    
  • 没有关键字的示例

    "hello, who are you?".scan(/\w+/).any?{|k| keywords.key?(k)}    # => false
    
  • 带有关键字的示例

    "Hello, how are you?".scan(/\w+/).any?{|k| keywords.key?(k)}    # => true
    
  • 没有关键字的示例

    "hello, who are you?".scan(/\w+/).any?{|k| keywords.key?(k)}    # => false
    

要检查字符串中是否至少有一个关键字,请执行以下操作:

keywords = ["hello", "how"]
r = Regexp.new(keywords.join("|")) # case-sensitive
r.match("Hello, how are you?").nil? => false
r.match("no keywords exist").nil? => true

要获得更快的正则表达式,请使用。它是Google re2的ruby包装程序。要检查字符串中是否至少有一个关键字,请执行以下操作:

keywords = ["hello", "how"]
r = Regexp.new(keywords.join("|")) # case-sensitive
r.match("Hello, how are you?").nil? => false
r.match("no keywords exist").nil? => true

要获得更快的正则表达式,请使用。这是谷歌re2的ruby包装器

可能重复:可能重复:这是OP已经拥有的,也是OP试图不做的。非常感谢。我也尝试过类似的方法,但性能没有明显改善。我将尝试re2,但现在确定它是否可以在AWS EMR上使用。EMR使用EC2实例?如果是,编译re2,然后安装gem。这应该行得通。这是OP已经做过的,也是OP不想做的。非常感谢。我也尝试过类似的方法,但性能没有明显改善。我将尝试re2,但现在确定它是否可以在AWS EMR上使用。EMR使用EC2实例?如果是,编译re2,然后安装gem。这应该行得通,很有帮助。谢谢,这很有帮助。谢谢