2013-03-28 18 views
6

私は、人間が読めるwikiのような違いをhtmlの2つの本文の間に作り出そうとしています。私は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." 

これはGSUB除き

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

は、トラブルの文字.?!の挿入を持っているように見えますトリックを行う必要があります。代わりにこれが返されます

"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(/[^\.!?]+[\.!?????????????????????????????????? 「ストリップ」)残っている唯一の問題は、「私はライオンです。私の声が聞こえます。あなたの名前は何ですか?私を裁かないでください」、最後に「私を裁かないでください」 – michaelsking1993

+1

解決策: 'text.scan(/[^\.!?]+[!.!?]+ | [^ \。!] +。\ z /)。map(&:strip)'(そこにはおそらくよりエレガントな方法ですが、これは機能しています)。入力: "私はライオンです...私は轟音を聞く!!あなたの名前は何ですか?私を判断しないでください" - >出力: "["私はライオンです... "、" "あなたの名前は何ですか?"、 "私を裁かないでください"] " – michaelsking1993

関連する問題