我试图将一个分子作为一个字符串分成它的各个原子组成部分。每个原子都以大写字母开头,以最后一个数字结束。
例如,'SO4'
将成为['S', 'O4']
。
'C6H12O6'
将成为['C6', 'H12', 'O6']
。
非常确定我需要使用正则表达式模块。这个答案接近我正在寻找的内容:Split a string at uppercase letters
答案 0 :(得分:4)
使用re.findall()
模式:
[A-Z][a-z]?\d*
[A-Z]
匹配任何大写字母
[a-z]?
匹配零个或一个小写字符
\d*
匹配零个或多个数字
根据您的示例,这应该可行,但您应该为此目的查找任何特定的库。
示例:强>
>>> re.findall(r'[A-Z][a-z]?\d*', 'C6H12O6')
['C6', 'H12', 'O6']
>>> re.findall(r'[A-Z][a-z]?\d*', 'SO4')
['S', 'O4']
>>> re.findall(r'[A-Z][a-z]?\d*', 'HCl')
['H', 'Cl']