如果我有一个字符串“blueberrymuffinsareinsanelyDelicious”,那么最有效的解析方法是什么,这样我就剩下了[“blueberry”,“muffins”,“are”,“insanely”,“delicious”]?
我已经有了我的单词列表(mac's/usr/share/dict/words),但是如何确保完整的单词存储在我的数组中,也就是蓝莓,而不是两个独立的单词,blue和berry。

最佳答案

尽管有些情况下可能有多种解释,选择最好的解释可能会有麻烦,但您始终可以使用这样一种相当天真的算法来实现它:

WORDS = %w[
  blueberry
  blue
  berry
  fin
  fins
  muffin
  muffins
  are
  insane
  insanely
  in
  delicious
  deli
  us
].sort_by do |word|
  [ -word.length, word ]
end

WORD_REGEXP = Regexp.union(*WORDS)

def best_fit(string)
  string.scan(WORD_REGEXP)
end

这将解析您的示例:
best_fit("blueberrymuffinsareinsanelydelicious")
# => ["blueberry", "muffins", "are", "insanely", "delicious"]

请注意,这将跳过任何不匹配的组件。

关于ruby - 将没有空格的字符串解析为单个单词的数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41705626/

10-11 20:27