2011-04-06 114 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]/。唯一的缺點是,你的話會附加其他字符。像括號,連字符,點等。爲了計算這個唯一目的應該不成問題。

    如果你也想擁有這些單詞。然後你需要應用額外的字符剝離。