我有一个大型数据集,其中包含许多IUPAC有机化学命名法,格式如下:
2_3_7_8_TETRACHLORODIBENZO_P_DIOXIN_EXPOSURE
我需要能够将其翻译成标准的IUPAC表格,即:
2,3,7,8-tetrachlorodibenzo-p-dioxin exposure
有一个有限列表,单个字符将成为化学名称的一部分(例如,在上述情况下为P
),在任何情况下都不是,_
将替换为[blank space]
{1}}。但是,我正在努力的是在正则表达式中区分_
被-
替换的情况以及它被,
替换的情况。我正在使用带有命名正则表达式的正则表达式替换和替换它们的函数。定位器的捕获正则表达式是
(?P<locants>((^|\s)\d{1,2}\s){1,6})
(请注意,在这种情况下,_
已被空格替换,因此\s
而不是_
的流行度
但是我该怎样写一些东西以确保2,3和7之后的空格被,
替换,但8之后的空格被-
取代?
答案 0 :(得分:2)
使用前瞻功能选择破折号后跟数字:
s = "2_3_7_8_TETRACHLORODIBENZO_P_DIOXIN_EXPOSURE"
s = re.sub(r"_(?=\d)", "," ,s)
#'2,3,7,8_TETRACHLORODIBENZO_P_DIOXIN_EXPOSURE'
s = re.sub(r"_", "-" ,s)
#'2,3,7,8-TETRACHLORODIBENZO-P-DIOXIN-EXPOSURE'
(您仍然需要做位置,但看起来您已经知道如何处理它们。)