使用R中的正则表达式重排化学名称中的官能团

时间:2014-01-16 20:59:34

标签: regex string r

之前我使用以下方法移动化学品末端提到的官能团 名称(用一个或多个“,”分隔)到前面:

name <- "2,6-Octadien-1-ol, 3,7-dimethyl-, (E)-"

paste(rev(strsplit(name, ", ")[[1]]), collapse = "")
[1] "(E)-3,7-dimethyl-2,6-Octadien-1-ol"

我现在有一些情况,其中“,”用作分隔符而不是“,”。有人想知道我应该怎么修这些名字吗?

E.g。

name <- "2,6-Octadien-1-ol,3,7-dimethyl-,(E)-"

应该产生

"(E)-3,7-dimethyl-2,6-Octadien-1-ol"

如果这些逗号不是在一个数字(或“(或”)“括号后面),我想在这种情况下打破逗号。但是我应该在strsplit中使用什么正则表达式来实现这一点?或者,如何指定一个正则表达式,该正则表达式在“,”或不跟随数字(或“(或”)“括号)的逗号处断开?

1 个答案:

答案 0 :(得分:1)

name <- "2,6-Octadien-1-ol, 3,7-dimethyl-, (E)-"
name = gsub("(\\D),","\\1#",gsub(" ","",name))
paste(rev(strsplit(name, "#")[[1]]), collapse = "")

这假设任何非数字后跟逗号是真正的分隔符,其他逗号是名称的一部分。