Python拆分不是预期的结果

时间:2015-10-15 18:02:49

标签: python regex

我正在尝试使用以下代码将字符串剪切成碎片:

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

我希望得到一些结果:

["C","O2"]

然而我得到了:

['','','']

3 个答案:

答案 0 :(得分:1)

由于您的re中没有捕获组,因此拆分的内容不属于结果。你得到的是在' 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"))

删除不真实的元素(在本例中为空字符串)。

答案 1 :(得分:1)

如果要拆分

使用这样的环境:

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

Regex live here.

<强>否则

简单匹配(不分割):

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

Regex live here.

希望它有所帮助。

答案 2 :(得分:0)

你也可以使用这个:

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