0
4

4 回答 4

0

您可以将其与:

.*(?<!\.)\.(?!\.)(?=(?:[^.]+|\.{3})*(?:\.{3}|…)$)

或者更换

(?<!\.)\.(?!\.)(?:[^.]+|\.{3})*(?:\.{3}|…)$

带一个.

于 2013-06-11T10:07:37.000 回答
0

我想我已经想出了一个适合我的解决方案。感谢之前回答的每个人,但这个表达式似乎可以满足我的需要,并且执行起来不像其他一些答案那么慢。它还考虑了其​​他句子终止标点符号,例如!or?而不仅仅是.

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

这个 get 是最后一个句子终止字符(用前瞻定义)。在这种情况下,它们是?!并且.后面没有...。这也解决了省略号字符问题,因为它实际上是一个句子终止白名单。这个表达式成功地找到了最大的带有闭包的文本块。

于 2013-06-11T10:32:22.927 回答
0

您可以[^.]*(?:\.{3}|…).*用空字符串替换以获得所需的结果。

例如:

result = Regex.Replace(input, "[^.]*(?:\\.{3}|…).*", "")
于 2013-06-11T09:12:04.247 回答
0

用这个:

result = Regex.Replace(input, "(.+\.).+(?:\.{3}|…)\s*", "$1")

编辑:

请改用此正则表达式:

(.+[^.]\.)(?:(?:[^.]{2})|$)
于 2013-06-11T09:16:12.437 回答