2011-04-06 115 views
5

当我分割字符串“Hello World/N”与分词红宝石计数

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

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

我想指望\ n或\ T作为字符串为好。

+2

请更正问题。你的一个说法是错误的,我也不明白你在问什么。 – Amadan 2011-04-06 07:24:44

+2

你的前四条线与这个问题无关。 – sawa 2011-04-06 12:50:17

回答

5

你要这样呢?

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

这是我想要的。非常感谢 。 – 2011-04-06 07:32:38

3

在字符串\n中有一个特殊的含义:它演变为将返回视为空白。 您应该避开反斜杠:\\n

如果要拆分空格你的字符串只是,你应该使用

"Hello world \n".split(/ /) 
+1

它会产生相同的错误结果,请参阅rubydoc: 如果pattern是一个String,则在分割str时将其内容用作分隔符。如果pattern是单个空格,则str将以空格分割,并且前导空格和忽略连续空白字符的运行。但分割(/ /)是好的。 – Dutow 2011-04-06 07:41:25

+1

@Dutow,谢谢。我纠正了答案。 – Yossi 2011-04-06 08:03:38

+1

这个看起来比使用扫描更简单。谢谢 – 2011-04-06 15:31:53

2
"hello world \n".scan /[\w\n\t]+/ 
0

您可以使用指定的字符类[:CNTRL:]。

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

这是如果你不想分手后撇号的话更好(不是90年代,等等)

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

使用\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]/。唯一的缺点是,你的话会附加其他字符。像括号,连字符,点等。为了计算这个唯一目的应该不成问题。

    如果你也想拥有这些单词。然后你需要应用额外的字符剥离。