ruby - 匹配字符串中任意位置的多个单词
问题描述
我想检查一个字符串中的所有单词是否selection
都存在于另一个字符串中。会有任意数量的单词。这不是 OR。所有单词必须出现在匹配器中。顺序无所谓。例如, when selection
is "John Zeni"
,它必须匹配" John Paul Zeni"
,因为"John"
和"Zeni"
都在匹配器中。如果selection
is 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
解决方案
("John Zeni".split - "John Paul Zeni".split).empty?
#=> true
如果str
可能包含标点符号,我们应该在拆分之前删除这些字符。
("John Zeni Lola".split - "John Lola Paul, Zeni.".gsub(/[[:punct:]]/,'').split).empty?
#=> true
推荐阅读
- java - 其他语句不打印行?
- php - Ajax 回调和 Laravel
- java - 我可以在一个类 Lombok 中同时使用 @data 和 @builder 注释吗?
- python-3.x - MacOS 上 Qlik 中的 Python 集成
- java - 使用 SHA-256 进行主要和 MGF1 摘要的 OAEP 的 Android RSA 加密
- function - verilog中的函数可以调用另一个函数吗?
- c - 裸机 C 编程中的闪烁 LED:STM32L476RG Nucleo 板
- python - 将浮点数的数据框转换为熊猫中的整数?
- xcode11 - Xcode 11 无法启动 CarPlay 音频应用程序
- amazon-web-services - 如何在 AWS 实例上运行 Jupyter 笔记本