2013-09-26 88 views
1

我希望将一些文本切成句子。匹配句子

我希望匹配所有文本,直到:一个句点后跟一个空格,一个问号后跟一个空格或一个感叹号,后面跟一个空格,以非贪婪的方式。

另外,标点可能出现在字符串的最后,或者后面跟着一个/ r/n。

这几乎做到这一点:

([^\.\?\!]*) 

但我缺少表达的空间。我该如何解决?

例子:

I' a.m not. So? Sure about this! Actually.应该给:

I' a.m not 
So 
Sure about this 
Actually 
+0

你在用什么语言工作? – justhalf

+0

有趣的是,人们如何尽可能快地制定答案,而问题本身并不十分清楚。哈哈 – justhalf

+0

在这种情况下,@stema的答案是最好的。接受这个答案! – justhalf

回答

1

试试这个:

(.*?[!\.\?])

*给所有,

[]是任何的。这些字符

然后()给你一个组参考,所以你可以得到匹配。

+0

为什么这不适合我? http://regex101.com/r/nS8yC8 – Baz

+0

因为你的问题不是很具体。你最初的问题是匹配所有事物,直到一段时间,问号或感叹号,_跟着太空_ – justhalf

+0

我的错误 - 第一个问题是它需要一个?使*。懒惰(第一次匹配)。现在,如果你正在代码中使用它,我会做的就是循环,所以调用它 - 然后去掉句子并在结果文本上再次调用它。 –

1

使用非贪婪匹配以s向前看:

^.*?(?=[.!?](|$)) 

注意你怎么没有逃脱那些字符,当他们在一个字符类[...]

+0

这就是它!但是,嗯,OP说甚至可能没有任何标点符号。 – justhalf

+0

@justhalf你是对的 - 我现在已经在完全停止之后照顾了空间*或*输入的结束。 – Bohemian

0

这应做到:

^.*?(?=[!.?][\s]) 
+0

将'\ s'匹配行结束? – justhalf

+0

是的,它匹配任何空格字符。你可以更具体,只匹配一个空间。 –