如何使用 R 中的正则表达式提取字符第一次出现和第二次出现之间的部分?

How to extract a portion between the first and second occurrence of a character using regular expressions in R?

我有一个如下所示的数据框:

我需要提取第一次和第二次出现之间的 UniProt ID仅从第 5 行到第 14 行。

预期结果:

A0A3Q8IUE6
A4I9M8
E9BQL4
Q4Q3E9
A0A640KX53
E9B4M7
.
.

我们可以在这里尝试使用 strsplitapply 函数:

df$output <- sapply(df$x, function(x) strsplit(x, "\|")[[1]][2])
df

                  x     output
1 A|A0A3Q8IUE6|blah A0A3Q8IUE6
2      B|A4I9M8|meh     A4I9M8

数据:

x <- "A|A0A3Q8IUE6|blah"
y <- "B|A4I9M8|meh"
df <- data.frame(x=c(x,y))

注意:如果数据框中的某些 x 值不是竖线分隔格式,因此不会有第二个元素,那么 output 可能会被分配给原始值.如果你想要一些其他的行为,我们可以使用 grepl 来检测,例如

df$output <- ifelse(grepl("^(?:tr|sp)\|", df$x),
                    sapply(df$x, function(x) strsplit(x, "\|")[[1]][2]),
                    NA)