我試圖削減一個字符串轉換爲在Python塊用下面的代碼:Python的分裂不是預期的結果
re.split("[A-Z][a-z]?[0-9]*","CO2")
我期待一些結果是這樣的:
["C","O2"]
然而,我得到:
['','','']
我試圖削減一個字符串轉換爲在Python塊用下面的代碼:Python的分裂不是預期的結果
re.split("[A-Z][a-z]?[0-9]*","CO2")
我期待一些結果是這樣的:
["C","O2"]
然而,我得到:
['','','']
由於您沒有捕獲組,所以您分開不是結果的一部分。你得到的是'C'之前的空字符串,'C'和'O2'之間的空字符串以及'O2'之後的空字符串。
如果使用
re.split("([A-Z][a-z]?[0-9]*)","CO2")
你會得到
['', 'C', '', 'O2', '']
一個骯髒的方法是使用
filter(None, re.split("([A-Z][a-z]?[0-9]*)","CO2"))
以刪除不truthy元素(在這種情況下, ,空字符串)。
如果要拆分
使用變通一下這樣的:
(?<=[A-Z\d])(?=[A-Z])
否則
ŧ Ø簡單的匹配(無分):
[A-Z][a-z]?\d*
希望它能幫助。
您也可以使用這一個:
>>> import re
>>> x = re.findall(r"^([A-Z][a-z]?)([A-Z][0-9]*)$","CO2")
>>> list(x[0])
['C', 'O2']
總體而言,你可能寧願使用're.match',看什麼'你走出groups'。當您想要放棄某些分隔符時,「split」最適合使用。 [完整的正則表達式文檔在這裏。](https://docs.python.org/3/library/re.html#re.match) – turbulencetoo
推薦:[regex-for-parsing-chemical-formula](http:// stackoverflow.com/questions/23602175/regex-for-parsing-chemical-formulas) –