一个在Python(否则很强大)re
模块的特殊怪癖是re.split()
will never split a string on a zero-length match,例如,如果我想分割沿字边界的字符串:为什么Python的`re.split()`在零长度匹配上分裂?
>>> re.split(r"\s+|\b", "Split along words, preserve punctuation!")
['Split', 'along', 'words,', 'preserve', 'punctuation!']
,而不是
['', 'Split', 'along', 'words', ',', 'preserve', 'punctuation', '!']
为什么它有这个限制?它是否由设计?其他正则表达式的风格是这样吗?
感谢您的链接和解决方法。我真的认为他们应该接受BDFL的建议并为此添加一个标志。 – 2010-04-26 12:25:58
这是一个真正蹩脚的设计决定。 RE是一个设计决策不应该被人们“期望”驱动的事情,因为很多关于RE的事情都不符合人们的“期望”,无论如何这意味着什么。 'x *'应该与''abc'匹配,因为这就是RE所说的:“匹配x,零次或多次”。这就是你使用'*'时得到的结果。 – 2013-02-22 21:01:11
当试图分割一个pascal大小写变量名('re.split('(?<= [a-z])(?= [A-Z])',name)')时,也碰到过这个问题。太糟糕了。 – Blixt 2015-05-05 14:53:59