检查字符串是不是包含多个子字符串之一

Posted

技术标签:

【中文标题】检查字符串是不是包含多个子字符串之一【英文标题】:Check whether a string contains one of multiple substrings检查字符串是否包含多个子字符串之一 【发布时间】:2014-06-25 04:41:34 【问题描述】:

我有一个长字符串变量,想知道它是否包含两个子字符串之一。

例如

haystack = 'this one is pretty long'
needle1 = 'whatever'
needle2 = 'pretty'

现在我需要像这样的析取,但它在 Ruby 中不起作用:

if haystack.include? needle1 || haystack.include? needle2
    puts "needle found within haystack"
end

【问题讨论】:

【参考方案1】:

使用or 而不是||

if haystack.include? needle1 or haystack.include? needle2

or 的出现率低于 || ,或者如果你愿意的话“粘性较小”:-)

【讨论】:

【参考方案2】:

我推荐要搜索的子字符串数组

needles = ["whatever", "pretty"]

if haystack.match?(Regexp.union(needles))
  ...
end

【讨论】:

【参考方案3】:

您可以进行正则表达式匹配:

haystack.match? /needle1|needle2/

或者如果你的针在一个数组中:

haystack.match? Regexp.union(needles)

(对于 Ruby .match 不带问号。)

【讨论】:

您的代码有错字,应该是match,没有问号。 @SephCordovano 我怎么用错了,我该如何纠正?对我来说,它看起来与上面链接的 match? 方法文档示例完全相同。 @SephCordovano 您的评论令人困惑。您应该展开或删除它。 @jj_这有什么困惑?如果要搜索子字符串数组,请使用联合。 请在评论前检查您的 Ruby 版本。 2.4.0 有 match? 而以前的 Ruby 版本没有这个方法。在答案中添加了一个警告,以帮助解决此处提到的一些 cmets。【参考方案4】:

检查是否至少包含两个子字符串之一:

haystack[/whatever|pretty/]

返回找到的第一个结果

【讨论】:

【参考方案5】:

我试图找到一种简单的方法来搜索数组中的多个子字符串,并最终得到下面的答案,它也回答了这个问题。我已经添加了答案,因为我知道许多极客会考虑其他答案,而不仅仅是接受的答案。

haystack.select  |str| str.include?(needle1) || str.include?(needle2) 

如果部分搜索:

haystack.select  |str| str.include?('wat') || str.include?('pre') 

【讨论】:

【参考方案6】:
(haystack.split & [needle1, needle2]).any?

使用逗号作为分隔符:split(',')

【讨论】:

【参考方案7】:
[needle1, needle2].any?  |needle| haystack.include? needle 

【讨论】:

也适用于 .all?如果您想要 AND 逻辑而不是 OR 逻辑。谢谢,瑟夫! 如果您需要灵活处理针数,这是更好的答案。 needles = [obj1, obj2, ..., objN]; needles.any? |needle| haystack.include? needle 【参考方案8】:

在表达式中尝试括号:

 haystack.include?(needle1) || haystack.include?(needle2)

【讨论】:

不敢相信就是这样。谢谢。

以上是关于检查字符串是不是包含多个子字符串之一的主要内容,如果未能解决你的问题,请参考以下文章

检查字符串是不是包含子字符串列表并保存匹配的子字符串

javascript 检查String是否包含多个子字符串匹配

检查用户输入是不是包含子字符串

检查熊猫数据框中是不是有多个子字符串[重复]

结合多个成员资格测试[重复]

检查字符串是不是包含 Velocity 中的特定子字符串