首页 > 解决方案 > 匹配字符串中任意位置的多个单词

问题描述

我想检查一个字符串中的所有单词是否selection都存在于另一个字符串中。会有任意数量的单词。这不是 OR。所有单词必须出现在匹配器中。顺序无所谓。例如, when selectionis "John Zeni",它必须匹配" John Paul Zeni",因为"John""Zeni"都在匹配器中。如果selectionis just "John",那么它应该匹配,但是由于有多个单词,所以所有单词都必须匹配。需要正则表达式解决方案。

这是我尝试过的:

selection = "John Zeni"
pattern = selection.split(" ").join("|")
# => "John|Zeni"
/#{Regexp.quote(pattern)}/
# => /John\|Zeni/ 
" John Paul Zeni".match(/#{Regexp.quote(pattern)}/)
# => nil 

为什么不匹配?问题在于Regexp.quote我认为。两个词在匹配器中匹配很重要。这也不应该匹配:

" John Paul Zeni" =~ /(John|Zach)/ 
# => 1

标签: rubyregex

解决方案


("John Zeni".split - "John Paul Zeni".split).empty?
  #=> true

如果str可能包含标点符号,我们应该在拆分之前删除这些字符。

("John Zeni Lola".split - "John Lola Paul, Zeni.".gsub(/[[:punct:]]/,'').split).empty?
  #=> true

推荐阅读