检查字符串是不是包含多个子字符串之一
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)
【讨论】:
不敢相信就是这样。谢谢。以上是关于检查字符串是不是包含多个子字符串之一的主要内容,如果未能解决你的问题,请参考以下文章