在 Python 中格式化 IUPAC 命名法的好方法(最好是快速的)
A good (and preferably fast) way to format IUPAC nomenclature in Python
我有一个大型数据集,其中包含许多格式如下的 IUPAC 有机化学命名法:
2_3_7_8_TETRACHLORODIBENZO_P_DIOXIN_EXPOSURE
我需要能够将其翻译成标准的 IUPAC 表格,即:
2,3,7,8-tetrachlorodibenzo-p-dioxin exposure
化学名称中包含哪些单个字符的列表有限(例如上述情况下的 P
),无论如何,_
将被替换通过 [blank space]
。但是,我正在努力解决的是在正则表达式中区分 _
被 -
替换和 ,
替换的情况。我正在使用带有命名正则表达式的正则表达式替换和替换它们的函数。定位器的捕获正则表达式是
(?P<locants>((^|\s)\d{1,2}\s){1,6})
(请注意,在这种情况下,_
s 已经被空白 spaces 取代,因此 \s
而不是 [=14] =])
但是我该如何写一些东西来确保 2、3 和 7 之后的 space 被替换为 ,
而 8 之后的被替换为 -
?
使用前瞻功能 select 破折号后跟数字:
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'
(定位器还是要做,但看起来你已经知道怎么处理了。)
我有一个大型数据集,其中包含许多格式如下的 IUPAC 有机化学命名法:
2_3_7_8_TETRACHLORODIBENZO_P_DIOXIN_EXPOSURE
我需要能够将其翻译成标准的 IUPAC 表格,即:
2,3,7,8-tetrachlorodibenzo-p-dioxin exposure
化学名称中包含哪些单个字符的列表有限(例如上述情况下的 P
),无论如何,_
将被替换通过 [blank space]
。但是,我正在努力解决的是在正则表达式中区分 _
被 -
替换和 ,
替换的情况。我正在使用带有命名正则表达式的正则表达式替换和替换它们的函数。定位器的捕获正则表达式是
(?P<locants>((^|\s)\d{1,2}\s){1,6})
(请注意,在这种情况下,_
s 已经被空白 spaces 取代,因此 \s
而不是 [=14] =])
但是我该如何写一些东西来确保 2、3 和 7 之后的 space 被替换为 ,
而 8 之后的被替换为 -
?
使用前瞻功能 select 破折号后跟数字:
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'
(定位器还是要做,但看起来你已经知道怎么处理了。)