一個在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