首页 > 解决方案 > 试图用正则表达式拆分句子

问题描述

到目前为止,在这里找到的这个正则表达式在我参与的几乎所有比赛中都很好用。

(?<!\w\.\w.)(?<![A-Z][a-z]\.)(?<=[.?])\s

感染它甚至可以正确拆分像这样的句子:

Mr. Daniel, who love cakes, is taking a trip to Nevada. Not gonna lie, i would go as well.

进入:

Mr. Daniel, who love cakes, is taking a trip to Nevada.
Not gonna lie, i would go as well.

不幸的是,它没有涵盖一个案例。例如,如果我有这样的句子:

C. Daniel, who love cakes, is taking a trip to Nevada. Not gonna lie, i would go as well.

此正则表达式将拆分为三个子句子:

C.
Daniel, who love cakes, is taking a trip to Nevada.
Not gonna lie, i would go as well.

代替:

C. Daniel, who love cakes, is taking a trip to Nevada.
Not gonna lie, i would go as well.

我们缺少的是这种特定情况是当我们找到一个匹配时,它有一个大写图表,后跟一个点 (.),我们不必拆分。

我仍然不知道如何正确使用正则表达式,所以如果你能告诉我为什么你的答案会起作用,我将不胜感激

标签: pythonregex

解决方案


您可以扩展该模式,在后面添加一个否定的lookbehind (?<!\b[A-Z]\.),以断言不是大写字符,后跟.直接向左。

我认为您也可以在后面省略点,\w.因为点匹配除换行符以外的任何字符。

(?<!\b[A-Z]\.)(?<!\w\.\w)(?<![A-Z][a-z]\.)(?<=[.?])\s

查看正则表达式演示


推荐阅读