您不能使用/w
作爲一個單詞字符等同於:
[a-zA-Z0-9_]
其中明確包括號碼,因此"B2Br"
匹配。
你也不能只使用正則表達式:
[a-zA-Z]+
因爲這會產生這樣的事情"CO2"
應該產生2
分離分子的一個原子:C
和0
。
不過,我想出了(regex101
)正則表達式只檢查一個大寫字母,然後0
和1
(因此可選)小寫字母之間。
這:
[A-Z][a-z]{0,1}
和它將正確產生的原子。
於是將這一到您的原lists
的:
list_given_atoms= ['C', 'Cl', 'Br']
list_of_molecules= ['C(B2Br)[Cl{H]Cl}P' ,'NAME']
我們想先找到在list_of_molecules
所有的原子,然後創建原子計數的字典中list_given_atoms
。
因此,要找到所有的原子,我們可以在分子列表中的第一個元素上使用re.findall
:
atoms = re.findall("[A-Z][a-z]{0,1}", list_of_molecules[0])
這給list
:
['C', 'B', 'Br', 'Cl', 'H', 'Cl', 'P']
然後,拿到計數字典,我們可以用dictionary-comprehension
:
counts = {a: atoms.count(a) for a in list_given_atoms}
,其表明了期望的結果:
{'Cl': 2, 'C': 1, 'Br': 1}
而且也將工作時,我們有分子如CO2
等
*在字典中的* - 但你'countdict'是一個列表 – RomanPerekhrest