[英]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"]
这里有两个选择。
你想完全跳过数字 。 很好,只是使用
/\\p{Letter}+/
你不想跳过数字,因为你也想把它们算作单词。 然后用
/\\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.