我试图削减一个字符串转换为在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) –