【发布时间】:2020-06-10 05:12:56
【问题描述】:
我有一个这样的化合物列表:
ex = ['CrO3', 'Cr8O21', 'NbCrO4']
我想分别获取元素和数字。像这样的:
['Cr','O',3]
['Cr',8,'O',21]
['Nb','Cr','O',4]
但是,这必须是一个通用过程 - 这些并不总是我正在使用的化合物。 我认为这可以使用正则表达式和 split() 函数来完成。但是,我很难找到正确的正则表达式来得到我想要的。
这是我现在拥有的:
# elements to split by
split_elements = ['Cr','Nb','O']
def split(compound, split_elements):
separated = []
splitstr = ")|(?=".join([str(elem) for elem in split_elements])
splitstr = '('+splitstr+')'
# splitstr will end up like this:
# (Cr)|(?=Nb)|(?=O)
result = list(filter(None,re.split(splitstr, compound)))
separated.append(result)
return(separated)
for item in ex:
print(split(item, split_elements))
# Output
# [['Cr', 'O3']]
# [['Cr', '8O21']]
# [['Nb', 'Cr', 'O4']]
如您所见,数字仍然存在,我不知道为什么。我已经搜索了一个类似的问题,但我找不到任何问题(我现在所拥有的已经是疯狂谷歌搜索的结果)。
有没有人有任何解决方案或建议?
【问题讨论】: