2015-10-15 65 views
0

我試圖削減一個字符串轉換爲在Python塊用下面的代碼:Python的分裂不是預期的結果

re.split("[A-Z][a-z]?[0-9]*","CO2")

我期待一些結果是這樣的:

["C","O2"] 

然而,我得到:

['','',''] 
+1

總體而言,你可能寧願使用're.match',看什麼'你走出groups'。當您想要放棄某些分隔符時,「split」最適合使用。 [完整的正則表達式文檔在這裏。](https://docs.python.org/3/library/re.html#re.match) – turbulencetoo

+1

推薦:[regex-for-parsing-chemical-formula](http:// stackoverflow.com/questions/23602175/regex-for-parsing-chemical-formulas) –

回答

1

由於您沒有捕獲組,所以您分開不是結果的一部分。你得到的是'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元素(在這種情況下, ,空字符串)。

1

如果要拆分

使用變通一下這樣的:

(?<=[A-Z\d])(?=[A-Z]) 

Regex live here.


否則

ŧ Ø簡單的匹配(無分):

[A-Z][a-z]?\d* 

Regex live here.


希望它能幫助。

0

您也可以使用這一個:

>>> import re 
>>> x = re.findall(r"^([A-Z][a-z]?)([A-Z][0-9]*)$","CO2") 
>>> list(x[0]) 
['C', 'O2']