如何从字符向量r中动态提取字符串

如何从字符向量r中动态提取字符串,r,regex,extract,R,Regex,Extract,以下是三个字符向量: [1] "Session_1/Focal_1_P1/240915_P1_S1_F1.csv" [2] "Session_2/Focal_1_PA10/250915_PA10_S2_F1.csv" [3] "Session_3/Focal_1_DA100/260915_DA100_S3_F1.csv" 我试图以标准化的方式分别提取字符串P1、PA10和DA100(因为我还有几百个其他字符串要提取这个字符串) 我知道我需要使用regex,但我对它相当陌生,不确定是哪一个 我可

以下是三个字符向量:

[1] "Session_1/Focal_1_P1/240915_P1_S1_F1.csv"
[2] "Session_2/Focal_1_PA10/250915_PA10_S2_F1.csv"
[3] "Session_3/Focal_1_DA100/260915_DA100_S3_F1.csv"
我试图以标准化的方式分别提取字符串
P1
PA10
DA100
(因为我还有几百个其他字符串要提取这个字符串)

我知道我需要使用
regex
,但我对它相当陌生,不确定是哪一个

我可以看出,它们的共同点是6个数字(
\d\d\d\d\d\d
),后面跟着一个
\u
,然后是我想要的,后面跟着另一个
\u


如何提取我想要的内容?我相信使用
grep
,但不是100%使用我需要的正则表达式。

我们可以使用
gsub
。我们匹配零个或多个字符(
*
),后跟正斜杠(
\/
),后跟一个或多个数字和下划线(
\\d+
),或者(
)下划线的两个实例,后跟一个或多个非下划线的字符(
({u[^\ u]+){2}
),并将其替换为空白(


或者我们提取向量的
basename
,匹配一个或多个数字,后跟下划线(
\\d++
),后跟字符而不是下划线(
([^+)
),作为捕获组,后跟字符,直到字符串结束,并用捕获组的反向引用(
\\1
)替换它

sub("\\d+_([^_]+).*", "\\1", basename(v1))
#[1] "P1"    "PA10"  "DA100"
数据
v1
sub("\\d+_([^_]+).*", "\\1", basename(v1))
#[1] "P1"    "PA10"  "DA100"
v1 <- c( "Session_1/Focal_1_P1/240915_P1_S1_F1.csv",
       "Session_2/Focal_1_PA10/250915_PA10_S2_F1.csv",
       "Session_3/Focal_1_DA100/260915_DA100_S3_F1.csv")