1

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

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

此外,标点符号可能出现在字符串的最末尾,或者后跟 /r/n。

这几乎可以做到:

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

但我错过了表达式中的空格。我该如何解决?

例子:

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

I' a.m not
So
Sure about this
Actually
4

4 回答 4

2

您可以通过使用积极的前瞻断言来实现这样的条件。

[^.?!]+(?=[.?!] )

在 Regexr 上查看。

看demo的时候,一行末尾没有空格的句子是不匹配的。您可以通过添加与Anchor的交替并使用修饰符来解决此问题(使匹配成为一行的结尾):$m$

[^.?!]+(?=[.?!](?: |$))

在 Regexr 上查看

于 2013-09-26T06:57:38.150 回答
1

尝试这个:

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

.* 给出所有,

[] 是这些字符中的任何一个

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

于 2013-09-26T06:54:59.620 回答
1

使用带有 s 的非贪婪匹配向前看:

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

请注意,当它们在字符类中时,您不必转义这些字符[...]

于 2013-09-26T06:55:10.917 回答
0

这应该这样做:

^.*?(?=[!.?][\s])
于 2013-09-26T07:11:01.217 回答