给定输入:
str = "foo bar jim jam. jar jee joon."
我需要用空格分隔的所有 2 词和 3 词短语的输出:
[ "foo bar", "bar jim", "jim jam", "jar jee", "jee joon",
"foo bar jim", "bar jim jam", "jar jee joon" ]
特别注意上面缺少“jam jar”、“jim jam jar”和“jam jar jee”,由于时期。
我不能使用str.scan(/\w+/).each_cons(2).map{ |a| a.join(' ') }
,因为那将包括"jam jar"
.
扫描/\w+ \w+/
产量["foo bar", "jim jam", "jar jee"]
,特别是缺少“bar jim”和“jee joon”,并突出显示问题。
实际应用是为搜索引擎生成基于短语的索引。我想找到所有真正连续的单词作为短语,不包括那些用标点符号分隔单词的单词。
编辑:似乎有一种方法可以通过以下变体在正则表达式/扫描中执行此操作:
"a b c d".scan(/(?=([abc] [abc]) )[abc]/)
#=> [["a b"], ["b c"]]