Python 标点符号或驼峰格上的分句

Python 标点符号或驼峰格上的分句,python,regex,string,python-2.7,split,Python,Regex,String,Python 2.7,Split,我在python中有一个很长的字符串,我试图把它分解成一个句子列表。这些句子中只有一部分缺少拼音和空格 范例 我车库里有9只羊。电子游戏非常酷 我想不出用什么正则表达式来区分这两个!这简直让我发疯 这里也有适当的标点句,所以我想我应该制作几个不同的正则表达式模式,每一个都分离出不同的组合风格 输入 我车库里有9只羊。电子游戏非常酷。有些花生会唱歌,尽管它们尝起来比听起来好多了 输出 [“我车库里有9只羊”, “电子游戏超级酷。” “有些花生会唱歌,尽管它们尝起来比听起来好多了!”] 谢谢 位置拆

我在python中有一个很长的字符串,我试图把它分解成一个句子列表。这些句子中只有一部分缺少拼音和空格

范例

我车库里有9只羊。电子游戏非常酷

我想不出用什么正则表达式来区分这两个!这简直让我发疯

这里也有适当的标点句,所以我想我应该制作几个不同的正则表达式模式,每一个都分离出不同的组合风格

输入

我车库里有9只羊。电子游戏非常酷。有些花生会唱歌,尽管它们尝起来比听起来好多了

输出

[“我车库里有9只羊”, “电子游戏超级酷。” “有些花生会唱歌,尽管它们尝起来比听起来好多了!”]

谢谢

位置拆分:使用
regex
模块 我会给你们两个“分割”和“全部匹配”选项。让我们从“拆分”开始

在许多引擎中,但不是Python的
re
模块,您可以在零宽度匹配定义的位置拆分

在Python中,我将使用Matthew Barnett的杰出,其特性远远超过Python的默认
re
引擎。这是我在Python中默认的正则表达式引擎

通过您的输入,您可以使用以下正则表达式:

(?V1)(?<=[a-z])(?=[A-Z])|(?<=[.!?]) +(?=[A-Z])
输出:

string = "I have 9 sheep in my garageVideo games are super cool. Some peanuts can sing, though they taste a whole lot better than they sound!"
result = regex.split("(?V1)(?<=[a-z])(?=[A-Z])|(?<=[.!?]) +(?=[A-Z])", string)
print(result)
['I have 9 sheep in my garage', 
'Video games are super cool.', 
'Some peanuts can sing, though they taste a whole lot better than they sound!']
解释

  • (?V1)
    指示引擎使用新行为,我们可以根据零宽度匹配进行拆分

  • (?像“deArmond博士去药店了吗?”这样的字符串的正确输出是什么?分句很难
    
    print(regex.findall(r".+?(?:(?<=[.!?])|(?<=[a-z])(?=[A-Z]))",string))