rePython中的一个特别怪异的(非常强大的)模块是re.split() 永远不会在零长度匹配上拆分字符串,例如,如果我想沿着字边界分割字符串:
>>> re.split(r"\s+|\b", "Split along words, preserve punctuation!")
['Split', 'along', 'words,', 'preserve', 'punctuation!']
Run Code Online (Sandbox Code Playgroud)
代替
['', 'Split', 'along', 'words', ',', 'preserve', 'punctuation', '!']
Run Code Online (Sandbox Code Playgroud)
为什么会有这个限制?它是按设计的吗?其他正则表达式的味道是这样的吗?
int*_*jay 22
这是一个设计决策,可能已经走了.蒂姆·彼得斯这篇文章解释说:
例如,如果你用模式x*分割"abc",你期望什么?模式匹配(长度为0)在4个地方,但我敢打赌大多数人会惊讶得到
['','a','b','c','']
回来而不是(因为他们得到)
[ 'ABC']
有些人不同意他的意见.由于向后兼容性问题,Guido van Rossum 不希望它改变.他说:
我可以添加一个标志来启用此行为.
编辑:
Jan Burgy发布了一个解决方法:
>>> s = "Split along words, preserve punctuation!"
>>> re.sub(r"\s+|\b", '\f', s).split('\f')
['', 'Split', 'along', 'words', ',', 'preserve', 'punctuation', '!']
Run Code Online (Sandbox Code Playgroud)
哪里'\f'可以被任何未使用的角色取代.
| 归档时间: |
|
| 查看次数: |
1665 次 |
| 最近记录: |