3

ケース1(末尾スペース)

> "on behalf of all of us  ".split(/\W+/)
 => ["on", "behalf", "of", "all", "of", "us"] 

ただし、先行スペースがある場合は、次のようになります

ケース 2(先頭スペース)

> "  on behalf of all of us".split(/\W+/)
 => ["", "on", "behalf", "of", "all", "of", "us"] 

Case 2 も Case 1 の結果を期待していました。

追加した

> "@dhh congratulations!!".split(/\W+/)
 => ["", "dhh", "congratulations"] 

誰かが私が行動を理解するのを手伝ってくれませんか?

4

3 に答える 3

4

[アップデート]

正規表現をスキップして、スペースで分割するだけです!

> "@dhh congratulations!!".split
 => ["@dhh", "congratulations"] 

\Wスペースを含む単語以外の任意の文字に一致します。そのため、パーサーは start にスペースがあり、スペースの後にいくつかの文字があります。それは分裂します。[a-zA-Z0-9]しかし、スペースが最後にある場合は、分割する他の文字が存在しません。

一貫した動作を得るには、メソッドを使用して空白を削除する必要があります#strip

ケース1(末尾スペース)

1.9.3p327 :007 > " on behalf of all of us ".strip.split(/\W+/) 
 => ["on", "behalf", "of", "all", "of", "us"] 

ケース 2(先頭スペース)

1.9.3p327 :008 > "on behalf of all of us ".strip.split(/\W+/) 
 => ["on", "behalf", "of", "all", "of", "us"]
于 2013-01-01T11:39:32.597 に答える
1

ドキュメントから:

split(pattern=$;, [limit]) → anArray

[...] limit パラメータを省略した場合、後続の null フィールドは抑制されます。limit が正の数の場合、最大でその数のフィールドが返されます (limit が 1 の場合、文字列全体が配列内の唯一のエントリとして返されます)。負の場合、返されるフィールドの数に制限はなく、末尾の null フィールドは抑制されません。

于 2013-01-01T13:14:27.107 に答える
0

ドキュメントのためだけに、次のように動作します

 " @dhh congratulations!!".gsub(/^\W+/,'').split /\W+/

もう一つ

 " @dhh congratulations!!".scan /\w+/

どちらも期待どおりの結果をもたらします。ただし、次のような短い形式には注意事項があります。

 > " Don't be shy.".scan /\w+/
 => ["Don", "t", "be", "shy"]  

私は実際に、冠詞、接続詞、前置詞などではない単語を収集しています。とにかく、そのような短い形式を無視しているため、このソリューションを使用しました。

ツイートからワードクラウドを作成中です。実績のあるアルゴリズムを知っている場合は、共有してください。

于 2013-01-02T06:11:04.813 に答える