簡體   English   中英

用Ruby計算分詞

[英]split word in Ruby for counting

當我拆分字符串“hello world / n”時

"hello world \n".scan(/\w+/)

我得到["hello", "world"]

我想將\\ n或\\ t計為字符串。

你想要這樣的東西嗎?

"hello world \n".scan(/\w+|\n/)

不要使用\\w+計數的話。 它將使用Unicode分隔數字和單詞,如下所示:

"The floating point number is 13.5812".scan /\w+/
=> ["The", "floating", "point", "number", "is", "13", "5812"]

對於具有其他分隔符(例如"12,000"數字也是如此。

Ruby 1.8中 ,表達式w+與Unicode一起使用,這已經改變了。 如果字符串中有Unicode字符,則該單詞也將被分隔。

"Die Apfelbäume".scan /\w+/
=> ["Die", "Apfelb", "ume"]

這里有兩個選擇。

  1. 你想完全跳過數字 很好,只是使用

     /\\p{Letter}+/ 
  2. 你不想跳過數字,因為你也想把它們算作單詞。 然后用

     /\\S+/ 

    表達式\\S+將匹配非空白字符/[^ \\t\\r\\n\\f]/ 唯一的缺點是,你的單詞會附加其他字符。 像括號,連字符,圓點等一樣。出於統計的唯一目的,這應該不是問題。

    如果你想要這些話。 然后你需要應用額外的字符剝離。

在字符串\\n有一個特殊含義:它演變為插入符號返回,它被視為空格。 你應該逃避反斜杠: \\\\n

如果你想只用空格分割你的字符串,你應該使用

"Hello world \n".split(/ /)
"hello world \n".scan /[\w\n\t]+/

如果你不想用撇號分割單詞(不是,90年代等),那就更好了

"hello world \n".split(/[^\w']+/)

您可以使用命名字符類[:cntrl:]。

irb(main):001:0> "hello world \n".scan(/\w+|[[:cntrl:]]/)
=> ["hello", "world", "\n"]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM