一个特别的怪癖(否则相当强大)re
Python中的模块是re.split()
永远不会在零长度匹配上分割字符串 http://docs.python.org/library/re.html#re.split,例如,如果我想沿单词边界分割字符串:
>>> re.split(r"\s+|\b", "Split along words, preserve punctuation!")
['Split', 'along', 'words,', 'preserve', 'punctuation!']
代替
['', 'Split', 'along', 'words', ',', 'preserve', 'punctuation', '!']
为什么它有这个限制呢?是设计使然吗?其他正则表达式风格是否有这样的行为?
这是一个设计决定,并且可以采取任何一种方式。蒂姆·彼得斯制作这个帖子 http://bugs.python.org/issue852532#msg19231解释:
例如,如果您按模式 x* 拆分“abc”,您会怎样做
预计?该模式在 4 个位置匹配(长度为 0),
但我敢打赌大多数人会惊讶地发现
[''、'a'、'b'、'c'、'']
回来而不是(因为他们确实得到了)
['abc']
但其他一些人不同意他的观点。吉多·范罗苏姆不想改变 http://bugs.python.org/issue3262#msg70749由于向后兼容性问题。他做到了say http://bugs.python.org/issue3262#msg73592:
不过,我可以添加一个标志来启用此行为。
Edit:
有一个解决方法 http://bugs.python.org/issue852532#msg19234扬·伯吉发表:
>>> s = "Split along words, preserve punctuation!"
>>> re.sub(r"\s+|\b", '\f', s).split('\f')
['', 'Split', 'along', 'words', ',', 'preserve', 'punctuation', '!']
Where '\f'
可以用任何未使用的字符替换。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)