我正在學習Python的正則表達式,以下是工作,我預計:*在Python正則表達式匹配中有副作用嗎?
>>> import re
>>> re.split('\s+|:', 'find a str:s2')
['find', 'a', 'str', 's2']
但是,當我改變+
到*
,輸出是怪我:
>>> re.split('\s*|:', 'find a str:s2')
['find', 'a', 'str:s2']
如何爲這樣的模式在Python中解釋?
我正在學習Python的正則表達式,以下是工作,我預計:*在Python正則表達式匹配中有副作用嗎?
>>> import re
>>> re.split('\s+|:', 'find a str:s2')
['find', 'a', 'str', 's2']
但是,當我改變+
到*
,輸出是怪我:
>>> re.split('\s*|:', 'find a str:s2')
['find', 'a', 'str:s2']
如何爲這樣的模式在Python中解釋?
您看到的'副作用'是re.split()
只會在大於0個字符的匹配項上進行拆分。
\s*|:
的圖案上的零個或多個空格,或上:
,以先到者爲準匹配任。但零空間無處不在。在超過零空格的地方匹配,分割。
由於\s*
模式匹配每次考慮分割字符時,下一個選項:
從不考慮。
拆分非空的匹配是called out explicitly in the re.split()
documentation:
注意分裂永遠不會在一個空的模式匹配拆分的字符串。
如果顛倒模式,:
是考慮,因爲它是第一個選擇:[?參考 - 這是什麼意思的正則表達式]
>>> re.split(':|\s*', 'find a str:s2')
['find', 'a', 'str', 's2']
如果你的意思做「或」爲您匹配,那麼你必須做這樣的事情: re.split('(\s*|:)', 'find a str:s2')
簡而言之: 「+」表示「至少一個字符」。 「*」任何(或沒有)
-1這不回答這個問題。 –
另見(HTTP://計算器。 com/q/22937618) –