我希望将一些文字剪成句子。
我希望匹配所有文本,直到:一个句点后跟一个空格,一个问号后跟一个空格或一个感叹号,后跟一个空格,以非贪婪的方式。
此外,标点符号可以在字符串的最后找到,或者后面跟一个/ r / n。
这几乎可以做到:
([^\.\?\!]*)
但是我错过了表达式中的空格。我该如何解决这个问题?
示例:
I' a.m not. So? Sure about this! Actually.
应该给:
I' a.m not
So
Sure about this
Actually
答案 0 :(得分:2)
您可以使用positive lookahead assertions来实现此类条件。
[^.?!]+(?=[.?!] )
当您查看演示时,没有跟随空格的行末尾的句子不匹配。您可以通过alternation添加Anchor $
并使用修饰符m
(使$
匹配行的结尾)来解决此问题:
[^.?!]+(?=[.?!](?: |$))
答案 1 :(得分:1)
试试这个:
(.*?[!\.\?] )
。*全部,
[]是这些字符中的任何一个
然后()给你一个参考组,这样你就可以得到匹配。
答案 2 :(得分:1)
使用与前瞻的非贪婪匹配:
^.*?(?=[.!?]( |$))
请注意,如果这些字符位于字符类[...]
中,您将不必逃避这些字符。
答案 3 :(得分:0)
这应该这样做:
^.*?(?=[!.?][\s])