提取R中第二个和第三个下划线之间的值

Joe*_*Joe 3 r

我在dataframe列下面有一个数据-

X_ABC_123_DF</n>
A_NJU_678_PP</n>
J_HH_99_LL</n>
II_00_777_PPP</n>
Run Code Online (Sandbox Code Playgroud)

我想为数据帧中的每一行提取第二个和第三个下划线之间的值,我正计划创建一个新列并存储这些值。用R写这个。我不确定如何写它的regex函数。

^(?:[^_]+_){2}([^_ ]+)<br>
Run Code Online (Sandbox Code Playgroud)

提取第二个下划线和第三个下划线或空格之间的单词

avi*_*seR 5

一些解决方案:

df$values = sapply(strsplit(df$V1, "_"), function(x) x[3])

df$values = gsub("(.*_){2}(\\d+)_.+", "\\2", df$V1)

library(dplyr)
library(stringr)
df %>%
  mutate(values = str_extract(V1, "\\d+(?=_[a-zA-Z]+.+$)"))
Run Code Online (Sandbox Code Playgroud)

结果:

                 V1 values
1  X_ABC_123_DF</n>    123
2  A_NJU_678_PP</n>    678
3    J_HH_99_LL</n>     99
4 II_00_777_PPP</n>    777
Run Code Online (Sandbox Code Playgroud)

数据:

df = read.table(text = "X_ABC_123_DF</n>
                A_NJU_678_PP</n>
                J_HH_99_LL</n>
                II_00_777_PPP</n>", stringsAsFactors = FALSE)
Run Code Online (Sandbox Code Playgroud)