Techioz Blog

文字列内のスペースのない単語をスキャンする

概要

Rubyで文字列から単語を抽出しようとしています。たとえば、これがあるとします。

「12jdfndjseven456sfjithree」

[“seven”, “three”] の配列を取得したい。私が探しているのは 1 ~ 9 番目の単語だけなので、どんな単語でも構いません。これらの特定の単語をスキャンして、出現した場合にマッピングする方法はありますか?

また、文字列内に表示される順序にしたいので、単に if/include を実行するのはやめてください。これにより、スキャンした順序でそれらが配置されると思います(私が間違っていない限り?)。

おそらく正規表現スキャンを実行できると思いますが、私は正規表現が苦手なので、数値ではなく単語であるため、どこから始めればよいかわかりません。

解決策

ターゲット単語の配列がある場合は、単語の配列をパイプ | で結合できます。

そして、この正規表現を使用してスキャンした後、

string = "12jdfndjseven456sfjithree"

words = %w[one two three four five six seven eight nine]

pattern = Regexp.union(words) # or %r{#{words.join('|')}} or /#{words.join('|')}/
# => /one|two|three|four|five|six|seven|eight|nine/

string.scan(pattern)
# => ["seven", "three"]