如何在一行中删除R中匹配模式前和匹配模式后的字符?

如何在一行中删除R中匹配模式前和匹配模式后的字符?,r,R,我有这个向量Target试试这个: gsub(".*(SS.*)T0.*","\\1",Target) [1] "SS1G_340" "SS2G_340" 工作原理: 使用regex,我们可以选择保留一个模式,并通过两步过程删除该模式之外的所有内容。第一步是把我们想要保留的模式放在括号里。第2步是引用我们希望保留的括号绑定模式的数量,因为有时我们可能有多个括号绑定元素。例如,请参见下面的示例: gsub(".*(SS.*)+(T0.*)","\\1",Target) [1] "SS1G_3

我有这个向量
Target试试这个:

gsub(".*(SS.*)T0.*","\\1",Target)

[1] "SS1G_340" "SS2G_340"
工作原理:

使用regex,我们可以选择保留一个模式,并通过两步过程删除该模式之外的所有内容。第一步是把我们想要保留的模式放在括号里。第2步是引用我们希望保留的括号绑定模式的数量,因为有时我们可能有多个括号绑定元素。例如,请参见下面的示例:

gsub(".*(SS.*)+(T0.*)","\\1",Target)

[1] "SS1G_340" "SS2G_340"
注意,这次我把T0.*放在了括号中,但我们仍然得到了正确的答案,因为我已经告诉gsub返回两个括号绑定模式中的第一个。但是现在看看如果改用\\2会发生什么:

gsub(".*(SS.*)+(T0.*)","\\2",Target)

[1] "T01"  "T021"

顺便说一下,.*是通配符。如果您想了解有关在R中使用正则表达式的更多信息,可以从中开始。

我们可以使用
stru-extract

library(stringr)
str_extract(Target, "SS[^T]*")
#[1] "SS1G_340" "SS2G_340"

请您解释一下为什么有
“\\1”
?@MAPK-没问题。请参阅上面的补充说明。我没有太多使用stru-extract。您知道sub、gsub和str_extract在大规模应用中的速度差异吗?@RyanRunge
str_extract
使用
stringi
等功能,速度非常快。所以,应该快一点,好的。谢谢,下次我必须试试。stringr是在stringi之上构建的,它使用ICU C库,应该比gsub更快