繁体   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