创建用于分析IUPAC有机化合物名称的正则表达式

2024-05-18 19:14:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图在空闲时间创建一个解析器,它可以解析出有机化合物名称中的所有官能团。同时,我也在尝试制作一个显示程序,可以从文件中读取数据,在屏幕上绘制化合物的可视化表示。这两个都是用python完成的。现在显示器正在使用一个坐标系来存储原子的位置。这就是为什么我要做解析器。在你问之前,不,这不是学校的项目。我是一个11年级的学生,还没学过正则表达式。在

以下是目前为止代码。抱歉没有评论。在

import re
main_pattern = r"(.*)(meth|eth|prop|but|pent|hex|hept|oct|non|dec|isodec|dodec)-?([,?\d+,?]*)?-?(di|tri|tetra|penta)?(ane|ene|yne)(.*)"

prefix_patterns = [r"(?<!\d-\()(?<!-\()-?([,?\d+,?]*)?-(di|tri|tetra|penta)?(methyl|ethyl|propyl|butyl|pentyl|hexyl|heptyl|octyl|nonyl|decyl)(?!\))",
        r"-?([,?\d+,?]*)?-(di|tri|tetra|penta)?(bromo|chloro|iodo|flouro)",
        r"-?([,?\d+,?]*)?-(di|tri|tetra|penta)?(cyano)",
        r"-?([,?\d+,?]*)?-(di|tri|tetra|penta)?(oxo|keto)",
        r"-?([,?\d+,?]*)?-(di|tri|tetra|penta)?(alkoxy)",
        r"-?([,?\d+,?]*)?-(di|tri|tetra|penta)?(hydroxy)",
        r"-?([,?\d+,?]*)?-(di|tri|tetra|penta)?(formyl)",
        r"-?([,?\d+,?]*)?-(di|tri|tetra|penta)?(carboxy)",
        r"-?([,?\d+,?]*)?-(di|tri|tetra|penta)?(alkoxycabonyl)",
        r"-?([,?\d+,?]*)?-(di|tri|tetra|penta)?(halocarbonyl)",
        r"-?([,?\d+,?]*)?-(di|tri|tetra|penta)?(amino)",
        r"-?([,?\d+,?]*)?-(di|tri|tetra|penta)?(carbamoyl)",
        r"-?([,?\d+,?]*)?-(di|tri|tetra|penta)?(nitro)",
        r"-?([,?\d+,?]*)?-(di|tri|tetra|penta)?(suplho)"]

branch_pattern = r"-?(\d+,?)*?-\((.*?)\)"



compound_name = r"1-methyl-2-pentyl-3,64,7-trihexyl-5-oxo-12,6,7-triketo-23-(siugvuis)-68-(asdlkhdrjnkln)-42-(3,4-dimethylpentyl)pent-5,2,7-triyne"

prefixes = list(prefix_patterns)
print  compound_name
print '\n\n'
main=re.findall(main_pattern,compound_name)
print main
print '\n\n'
for x in prefix_patterns:
    prefixes = re.findall(x,main[0][0])
    print prefixes

branches = re.findall(branch_pattern,main[0][0])
print branches

在示例中,当重新匹配“1-甲基”中的前缀methyl时,它也匹配来自 -42-(3,4-二甲基戊基)。我抬头看了看消极的向前看/向后看。但没有得到满意的结果。在

请你指出问题所在,并引导我找到答案。 提前谢谢


Tags: namereprefixmaintripatternspatternprint

热门问题