通过正则表达式将文本解析成句子

时间:2015-10-26 15:32:50

标签: regex

我想将文本拆分成句子。对于一个简单的例子,我有以下代码:

Regex.Split (input, @ "(? <= [\.! \?])");

然而,这仅处理以单个字符结尾的句子,而我希望能够处理以&#34;。&#34;,&#34; ...&#34结尾的句子。 ;,&#34;!&#34;,&#34;!..&#34;,&#34;?&#34;,&#34;?..&#34;,&#34; ?!&#34;,&#34;?!。&#34;,&#34;!?&#34;,&#34;!?。&#34;,&#34;‽&#34 ;或&#34;‽..&#34;。

对于只有&#34;的简单情况。&#34;和#34; ...&#34;,例如&#34;快速的棕色狐狸。简单的方法去... ... Qwerty。&#34;,我写了下面的代码:

string [] sentences = Regex.Split (input, @ "(? <= \. \. \. | \.)");

但是,这会将字符串拆分如下:

  • 快速的棕色狐狸。
  • 简单的方法去abc。
  • Qwerty键盘。

我想要这个:

  • 快速的棕色狐狸。
  • 简单的方式去abc ...
  • Qwerty键盘。

我应该如何编写正则表达式来执行此操作?

所以解决方案

(?<=\.)\s*(?=[^.])

Demo

2 个答案:

答案 0 :(得分:0)

更新@ Avinash的正则表达式,(?<=\.)\s*(?=[^.])demo)可以解决您的问题。

说明:

  • (?<=\.)断言以下字符串前面有一个点
  • \s*匹配零个或多个空格字符(在替换中丢弃它们)
  • (?=[^.])断言字符串后跟任何不是点的字符串(因此会忽略多个点)

答案 1 :(得分:0)

添加一个预测,以确保有一个句子结束标记,匹配所有空格和标记:

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

Demo