用ruby語言以句子為單位拆分一個字串

目標, 用ruby語言以句子為單位拆分一個字串. 如:
給出字串:
s="這是一個句子,另一個句子.一個新句子!難道這不是另一個句子嗎?"
將它分拆為:
 ["這是一個句子,"], ["另一個句子."], ["一個新句子!"], ["難道這不是另一個句子嗎?"]
樣式.
測試前將ruby的$KCODE環境變量設置為’u', 啟動UTF8編碼支持中文.
$KCODE=’u’
嘗試1:
>> s.split(/.|,|?|!/)
=> ["這是一個句子", "另一個句子", "一個新句子", "難道這不是另一個句子嗎"]
等同於:
>> s.split(/[.,!?]/)
=> ["這是一個句子", "另一個句子", "一個新句子", "難道這不是另一個句子嗎"]
雖然分開了句子, 但失去了標點.

>> s.split(/([.,!?])/)
=> ["這是一個句子", ",", "另一個句子", ".", "一個新句子", "!", "難道這不是另一個句子嗎", "?"]
用括號將正則組成一組, 標點出來了, 但和句子是分開的.

改用scan
>> s.scan /.+?[.,?!]/
=> ["這是一個句子,"], ["另一個句子."], ["一個新句子!"], ["難道這不是另一個句子嗎?"]
成功了!!

如果一定要這樣:
>> s.scan(/(.+?(.|?|!))/).collect{|p|p[0]}
=> ["這是一個句子,另一個句子.", "一個新句子!", "難道這不是另一個句子嗎?"]
也是可行的.

此條目發表在 Ruby on Rails 分類目錄。將固定鏈接加入收藏夾。

發表評論