如何在一行中删除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在大规模应用中的速度差异吗?@RyanRungestr_extract
使用stringi
等功能,速度非常快。所以,应该快一点,好的。谢谢,下次我必须试试。stringr是在stringi之上构建的,它使用ICU C库,应该比gsub更快