1

単語の部分一致を見つける手助けが必要です。3 つの連続する文字に一致する単語をターゲットに返す必要があります。例えば:

WORDS = ["born", "port" ,"cort", "mort"]
find_match("corn", WORDS)  =>  returns  ["born", "cort"]

の部分一致を検索する必要があります"corn"。また、「b orn」と「cor t」が一致します。

このような問題を解決するには、正規表現が最適ではない可能性があります。他のアイデアがあれば、遠慮なく共有してください。

4

2 に答える 2

6

each_cons部分文字列の配列を作成するために使用できます。

'corn'.chars.each_cons(3).map(&:join)
# ['cor', 'orn']

次にRegexp.union、配列を単一の正規表現に変換します。

re = Regexp.union('corn'.chars.each_cons(3).map(&:join))

re次に、配列要素と照合できます。

WORDS.select { |w| w =~ re }

一般化:

def find_match(word, words)
    re = Regexp.union(word.chars.each_cons(3).map(&:join))
    words.select { |w| w =~ re }
end

その一般的なテーマには多くのバリエーションがあると確信しています。たとえば、正規表現match_strの代わりに の形式を使用できますString#[]。長さ 3 のすべての部分文字列を引き出すには、さまざまな方法があると思います。

于 2013-10-20T02:26:45.843 に答える