簡體   English   中英

在包含單獨原子的列表中轉動一串化學元素

[英]Turning a string of chemical elements in a list containing the separate atoms

我正在嘗試從包含化學式的字符串創建一個列表,如下例所示:

structuralFormula1 = 'OCaOSeOO'

在列表中,我希望將所有化學原子彼此分開,如下所示:

structuralFormula1_list = ['O', 'Ca', 'O', 'Se', 'O', 'O']

我不知道如何開始解決這個問題。 任何提示將不勝感激:提前致謝:)

使用re.findall

>>> import re
>>> ex = 'OCaOSeOO'
>>> re.findall('[A-Z][a-z]?', ex)
['O', 'Ca', 'O', 'Se', 'O', 'O']

正則表達式解釋

  • [AZ] : 匹配大寫字母
  • [az] : 匹配小寫字母
  • [AZ][az] : 匹配大寫字母后跟小寫字母
  • [AZ][az]? : 匹配大寫字母后跟 0 個或多個小寫字母
>>> import re
>>> ex = 'OCaOSeOO'
>>> re.findall('[A-Z]', ex)
['O', 'C', 'O', 'S', 'O', 'O']
>>> re.findall('[A-Z][a-z]', ex)
['Ca', 'Se']
>>> re.findall('[A-Z][a-z]?', ex)
['O', 'Ca', 'O', 'Se', 'O', 'O']
>>>

使用re.findall

import re
re.findall('.[^A-Z]*', 'OCaOSeOO')

Output:

['O', 'Ca', 'O', 'Se', 'O', 'O']

你可以用re.split來重新分割:

import re
structuralFormula1 = 'OCaOSeOO'
print(re.split(r'(?<!^)(?=[A-Z])', structuralFormula1))

它在每個 position 分裂

  • 前面沒有字符串的開頭: (?<!^) => 這避免了前導空匹配
  • 后跟一個大寫字母: (?=[AZ])

Output:

['O', 'Ca', 'O', 'Se', 'O', 'O']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM