将文本拆分为句子,但跳过引用的内容

时间:2013-05-26 07:47:31

标签: ruby regex

我想使用正则表达式(使用Ruby)将一些文本拆分成句子。它不需要准确,所以像“华盛顿特区”这样的案例。可以忽略。

但是我要求如果引用句子(用单引号或双引号引用),那么应该忽略它。

说我有以下文字:

  

一句话。 “哇。”爱丽丝说。 Senetence Three。

应分为三句话:

  

一句话。
  “哇。”爱丽丝说   句子三。

目前我有content.scan(/[^\.!\?\n]*[\.!\?\n]/),但我的引号有问题。

更新

目前的答案可能会遇到一些性能问题。请尝试以下方法:

'Alice stood besides the table. She looked towards the rabbit, "Wait! Stop!", said Alice'.scan(regexp)

如果有人能弄清楚如何避免它会很好。谢谢!

1 个答案:

答案 0 :(得分:8)

这个怎么样:

result = subject.scan(
    /(?:      # Either match...
     "[^"]*"  # a quoted sentence
    |         # or
     [^".!?]* # anything except quotes or punctuation.
    )++       # Repeat as needed; avoid backtracking
    [.!?\s]*  # Then match optional punctuation characters and/or whitespace./x)