Ruby部分单词匹配

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"匹配.

正则表达式可能不是解决此类问题的最佳方法.如果您有其他想法,请随时分享.

mu *_*ort 6

您可以使用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的所有子串.

  • 或`words.grep(re)` (2认同)