如何从包含多个段落的文档中删除较小的句子

时间:2017-11-24 15:17:12

标签: regex

在一个包含句子序列的段落中,我想删除由少于3个单词组成的句子。句子以句号结束。

示例输入:
主题:印度。这是一个例句。 。印度的国内生产总值是2017年的x.x。期间之间和之后可能有多个空格。印度。对外政策。 2.5。 4.5。一些随机十进制数也是。电子邮件:abc@google.com。

示例输出:
这是一个例句。印度的国内生产总值是x.x in 2017.期间之间和之后可能有多个空格。一些随机十进制数字。

1 个答案:

答案 0 :(得分:1)

由于您尝试匹配的文字的性质以及您正在使用的内容,此正则表达式可能不适用于您的所有案例,但它适用于您提供的文本示例。

代码

See regex in use here

(?:^|(?<=\.\s))(?:\S*\s*){1,3}(?:\.\s+|\.$)

结果

输入

  

主题:印度。这是一个例句。 。印度的国内生产总值是x.x in   2017年。期间之间和之后可能有多个空格。   印度。对外政策。 2.5。 4.5。一些随机十进制数也是。   电子邮件:abc@google.com。

输出

  

这是一个例句。印度的国内生产总值是2017年的x.x。也许有   期间之间和之后是多个空格。一些随机小数   数字也是。

说明

  • (?:^|(?<=\.\s))匹配以下任一项
    • ^在行首处断言位置
    • (?<=\.\s)确保前面的正面背后是一个字面点后跟一个空格字符
  • (?:\S*\s*){1,3}匹配以下1至3次
    • \S*匹配任意数量的非空白字符
    • \s*匹配任意数量的空白字符
  • (?:\.\s+|\.$)匹配以下任一项
    • \.\s+匹配一个文字点后跟一个或多个空格字符
    • \.$匹配文字点并断言行尾的位置