2013-03-28 87 views
6

我正在嘗試在html載入文本的兩個主體之間產生一個人類可讀的類似wiki的區別。我使用的是diff-lcs,第一步是將字符串(字符數組)分成一組句子,但保留標點符號。將文本正文拆分爲句子,但保留標點符號?

"I am a lion. Hear me roar! Where is my cub? Never mind, found him.".magic_split(/[.?!]/) 
# => "I am a lion." "Hear me roar!" "Where is my cub?" "Never mind, found him." 

這應該做的伎倆

"I am a lion. Hear me roar! Where is my cub? Never mind, found him.".gsub(/[.?!]/, '\1|').split('|') 

除了GSUB似乎有麻煩的插入字符.?!。相反,它返回這

"I am a lion| Hear me roar| Where is my cub| Never mind, found him|" 

什麼是最簡單的方法來做一個非破壞性拆分?正如它保留了它分裂的角色。

回答

3

我認爲這應該是\0

>> string = "I am a lion. Hear me roar! Where is my cub? Never mind, found him." 
>> string.gsub(/[.?!]/, '\0|') 
    # "I am a lion.| Hear me roar!| Where is my cub?| Never mind, found him.|" 
11

scan應該做的伎倆(拋出strip在那裏擺脫尾隨空格)。

s = "I am a lion. Hear me roar! Where is my cub? Never mind, found him." 
s.scan(/[^\.!?]+[\.!?]/).map(&:strip) # => ["I am a lion.", "Hear me roar!", "Where is my cub?", "Never mind, found him."] 
+0

你會如何修改這個,如果你想追上一個句子結尾的「...」像「我是一頭獅子。聽我怒吼!我的幼崽在哪?不要緊,發現他......「 – michaelsking1993

+0

我編輯過它,如下所示:'text.scan(/[^\.!?]+[\.!?]+/)map(& :strip)「唯一的問題就是沒有一段時間地抓住最後一句話:」我是獅子,聽到我咆哮!你叫什麼名字?不要評價我「,錯過了最後的」不要判斷我「 – michaelsking1993

+1

Working solution:'text.scan(/[^\.!?]+[\.!?]+ | [^ \。!?] +。\ z /)。map(&:strip)'(there可能是更優雅的方式,但這是工作)。輸入:「我是獅子......聽到我咆哮!!你叫什麼名字?不要評價我」 - >輸出:「[」我是獅子......「」聽到我咆哮!!「 ,「你叫什麼名字?」,「不要判斷我」)「 – michaelsking1993

相關問題