1

我是红宝石新手。我想知道如何查找单个行中是否存在多个关键字。例如,一行“你好,你好吗?”,如果退出“你好”或“如何”,则返回 true。我尝试使用像 /Hello|how/ 这样的 reg exp,但是当有很多行要处理时,性能并不好。也许正则表达式适合这个用例,但我在谷歌找不到具体的例子。

谢谢您的帮助!

4

2 回答 2

2
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
    
于 2013-09-13T01:12:33.647 回答
-1

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

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

如需更快的正则表达式,请使用https://github.com/mudge/re2。它是 Googles re2 https://code.google.com/p/re2/的 ruby​​ 包装器

于 2013-09-13T01:45:17.703 回答