2010-10-02 109 views
2

我试图在小部分中划分长文本,以便每个部分至少有N个字符,并以一些停止标点符号(?。!)结尾。如果该部分比我们在出现下一个标点符号时刻出的N个字符大。是否可以使用正则表达式解决此问题?

例如:

比方说N = 10

​​

这句话应该分为两个部分分开。

[1] Do you want lime? 
[2] Yes. I love when I drink tequila. 
+0

你使用的是java,javascript,php吗?无论如何,它可以完成(努力).... :-) – 2010-10-02 10:36:44

+0

我想在Python中做到这一点。 – Ilija 2010-10-02 11:05:48

回答

2

也许这样吗? (感谢KennyTM进行最后的优化。)

.{10}[^.?!]*[.?!]+ 
+0

不需要在字符类中转义这些字符。这个正则表达式将总是匹配整个字符串。 – 2010-10-02 10:41:34

+0

你是对的,有一个问题。我相信逃跑并不会造成伤害。 – Thomas 2010-10-02 10:51:23

+0

我也试试这个:prog = re.compile('/([^ \。\?\!] {10,} [^ \。\?\!] *?[\。\?\!] +)+ /') result = prog.split(test)。但结果是这个例子的整个句子。 – Ilija 2010-10-02 11:02:35

2
.{10,}?[.!?]+\s* 

应该工作。它也将重复标点符号保持在一起,所以它分裂成Do you want lime??? Yes. I love when I drink tequila.Do you want lime???Yes. I love when I drink tequila.

但是,它没有考虑语音报考虑,并会分解成Peter said "Hi! How about dinner tonight?" and left.Peter said "Hi!How about dinner tonight?" and left.

莫非是需要考虑的问题?

+0

不,这不需要考虑?现在,我正在测试, – Ilija 2010-10-02 10:49:15

+0

它将如何分裂:你好? ! ...我的名字并不重要,所以我不是说它... – Thomas 2010-10-02 10:53:20

+0

我在Python中尝试这样编= re.compile('。{10,}?[。!?] + \ s *' ) result = prog.split(test)但它给了我一个清单 – Ilija 2010-10-02 11:00:28