【问题标题】:Molecular decomposition using re使用 re 进行分子分解
【发布时间】:2021-11-24 01:04:13
【问题描述】:

我想创建一个字典来拆分分子式的所有元素。 我尝试使用 re 模块

Formula="C16H21NO2Na3"

pat = re.compile('(?P<name>[A-Z][a-z]+)\[0-9]+(?P<name2>[0-9]+)')
molecule= pat.findall(Formula)
print (molecule)

我期待这个回报:

{'C': 16, 'H': 21, 'N': '', 'O': 2, 'Na': 3}

【问题讨论】:

    标签: python python-re molecule


    【解决方案1】:

    你已经很接近了

    pat = re.compile('(?P<name>[A-Z][a-z]?)(?P<value>[0-9]*)')
    

    name 是一个大写字母,后跟零个或 1 个小写字母,value 是 0 个或多个数字

    然后要使它成为一个字典,你只需调用它就可以了

    matches = pat.findall(Formula)
    data = dict(matches)
    # {'C': '16', 'H': '21', 'N': '', 'O': '2', 'Na': '3'}
    

    你可以更复杂地使用字典,如下所示

    data = {k: int(v) if v else 1 for k,v in matches}
    # {'C': 16, 'H': 21, 'N': 1, 'O': 2, 'Na': 3}
    
    # the following will also work, which is slightly shorter (thanks @copperfield)
    data = {k: int(v or 1) for k,v in matches}
    # {'C': 16, 'H': 21, 'N': 1, 'O': 2, 'Na': 3}
    

    【讨论】:

    • 你也可以用or代替三元运算符,比如int( v or 1)
    • 非常感谢@Joran Beasley 和 Copperfield,它运作良好!所以在最初的代码中,是\[0-9]+ 搞得一团糟。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-30
    • 2021-07-24
    相关资源
    最近更新 更多