hke*_*n27 1 ruby expression cpu-word match partial
我需要帮助找到部分单词匹配.它应该返回与目标三个连续字母匹配的单词.例如:
WORDS = ["born", "port" ,"cort", "mort"]
find_match("corn", WORDS) => returns ["born", "cort"]
Run Code Online (Sandbox Code Playgroud)
应找到部分匹配"corn".和"b orn "和" cor t"匹配.
正则表达式可能不是解决此类问题的最佳方法.如果您有其他想法,请随时分享.
您可以使用each_cons构建子串数组:
'corn'.chars.each_cons(3).map(&:join)
# ['cor', 'orn']
Run Code Online (Sandbox Code Playgroud)
然后Regexp.union将数组转换为单个正则表达式:
re = Regexp.union('corn'.chars.each_cons(3).map(&:join))
Run Code Online (Sandbox Code Playgroud)
然后你可以匹配re数组元素:
WORDS.select { |w| w =~ re }
Run Code Online (Sandbox Code Playgroud)
归纳:
def find_match(word, words)
re = Regexp.union(word.chars.each_cons(3).map(&:join))
words.select { |w| w =~ re }
end
Run Code Online (Sandbox Code Playgroud)
我确信这个一般主题有很多变化.例如,您可以使用match_str形式String#[]而不是正则表达式,我确信有很多不同的方法可以拉出长度为3的所有子串.