首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么Python的`re.split()`不能在零长度匹配上拆分?

为什么Python的`re.split()`不能在零长度匹配上拆分?
EN

Stack Overflow用户
提问于 2010-04-26 19:34:25
回答 2查看 2.2K关注 0票数 16

Python语言中re模块的一个特殊特性是re.split() will never split a string on a zero-length match,例如,如果我想要沿着单词边界拆分一个字符串:

代码语言:javascript
复制
>>> re.split(r"\s+|\b", "Split along words, preserve punctuation!")
['Split', 'along', 'words,', 'preserve', 'punctuation!']

而不是

代码语言:javascript
复制
['', 'Split', 'along', 'words', ',', 'preserve', 'punctuation', '!']

为什么它会有这样的限制?这是设计出来的吗?其他正则表达式风格也是这样的吗?

EN

回答 2

Stack Overflow用户

发布于 2020-08-10 03:30:21

Python在3.7版本中支持此功能:

代码语言:javascript
复制
>>> s = "You! Are you Tom? I am Danny."
>>> re.split(r'(?<=[.!\?])', s)
['You!', ' Are you Tom?', ' I am Danny.', '']
票数 1
EN

Stack Overflow用户

发布于 2010-04-29 22:50:04

基本上,split()是将两个不同的函数合并为一个。如果您提供了一个参数,则它的行为与在没有提供参数的情况下调用时的行为非常不同。

乍一看,似乎

代码语言:javascript
复制
s.split() == s.split(' \t\n')

但正如您所展示的,情况并非如此。医生说:

..。如果未指定sep或为None,则任何空格字符串都是分隔符,并从结果中删除空字符串。..。

即使添加了一个'remove_empty‘参数,它仍然会表现得很奇怪,因为'remove_empty’的默认值依赖于'sep‘参数的存在。

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

https://stackoverflow.com/questions/2713060

复制
相关文章

相似问题

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