首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于标点符号或骆驼格的分句

关于标点符号或骆驼格的分句
EN

Stack Overflow用户
提问于 2014-07-28 00:21:09
回答 1查看 535关注 0票数 1

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

示例

我有9只羊在我的garageVideo游戏是超级酷。

我想不出要把这两者分开的理由!把我逼疯了。

也有适当标点符号的句子,所以我想我应该做几个不同的正则表达式模式,每一个分开不同风格的组合。

输入

我有9只羊在我的garageVideo游戏是超级酷。有些花生可以唱歌,尽管它们的味道比听起来好得多!

输出

“我车库里有9只羊”,“电子游戏太酷了。”“有些花生会唱歌,尽管它们的味道比听起来要好得多!”

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-28 00:27:23

职位拆分:使用regex模块

我会给你一个“分割”和一个“匹配所有”选项。让我们从“分裂”开始。

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

在Python中,为了分割位置,我将使用Matthew的杰出的 module,它的特性远远超过Python的默认re引擎。这是Python中的默认regex引擎。

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

代码语言:javascript
复制
(?V1)(?<=[a-z])(?=[A-Z])|(?<=[.!?]) +(?=[A-Z])

请注意,如果您的缩略语格式奇怪,如B. B. C.,则需要对此进行修改。

示例Python代码:

代码语言:javascript
复制
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)

输出:

代码语言:javascript
复制
['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)指示引擎使用新的行为,在这种情况下,我们可以分割零宽度匹配。
  • (?<=[a-z])(?=[A-Z])匹配一个位置,其中查找后面的(?<=[a-z])可以断言前面的是小写字母,而展望(?=[A-Z])可以断言后面的是大写字母。
  • |或..。
  • (?<=[.!?]) +(?=[A-Z])匹配一个或多个空格( + ),其中查找后面的(?<=[.!?])可以断言前面的是点、邦、问号和空格,而前面的(?=[A-Z])可以断言后面的是大写字母。

findall选项2:使用(再次使用 regex 模块)

由于“拆分”和“匹配所有”操作是同一枚硬币的两面,所以您可以这样做:

代码语言:javascript
复制
print(regex.findall(r".+?(?:(?<=[.!?])|(?<=[a-z])(?=[A-Z]))",string))

同样,这将不适用于re (这将跳过启动第二句VideoV )。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24986995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档