我希望将一些文本切成句子。
我希望匹配所有文本,直到:句号后跟空格,问号后跟空格或感叹号后跟空格,以非贪婪的方式。
此外,标点符号可能出现在字符串的最末尾,或者后跟 /r/n。
这几乎可以做到:
([^\.\?\!]*)
但我错过了表达式中的空格。我该如何解决?
例子:
I' a.m not. So? Sure about this! Actually.
应该给:
I' a.m not
So
Sure about this
Actually
您可以通过使用积极的前瞻断言来实现这样的条件。
[^.?!]+(?=[.?!] )
在 Regexr 上查看。
看demo的时候,一行末尾没有空格的句子是不匹配的。您可以通过添加与Anchor的交替并使用修饰符来解决此问题(使匹配成为一行的结尾):$
m
$
[^.?!]+(?=[.?!](?: |$))
尝试这个:
(.*?[!\.\?] )
.* 给出所有,
[] 是这些字符中的任何一个
然后 () 给你一个参考组,这样你就可以得到匹配。
使用带有 s 的非贪婪匹配向前看:
^.*?(?=[.!?]( |$))
请注意,当它们在字符类中时,您不必转义这些字符[...]
。
这应该这样做:
^.*?(?=[!.?][\s])