2015-10-15 61 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']