使用 gsub 从数据帧中的两个“-”之间提取字符串

sap*_*370 1 regex r

请帮助 R 中的 gsub 代码进行提取,9045GT200 从中DT-9045-BIN1-C-A1, DT-GT200-BIN5-E-A2 出现在数据框中。

数据框有 1000 个条目

需要从每个条目中提取

即在第一个“-”和第二个“-”之间提取

akr*_*run 5

我们可以使用gsub. 匹配一个或多个不是 a -( [^-]+) 的字符的模式,从^字符串的开头 ( ) 后跟 a -or ( |a-后跟字符 ( .*) 并将其替换为空白 ( "")

gsub("^[^-]+-|-.*", "", str1)
#[1] "9045"  "GT200"
Run Code Online (Sandbox Code Playgroud)

或者另一种选择是sub我们匹配-后面没有跟-的字符,然后将不是 a 的字符捕获-为一组 ( ([^-]+)) 后跟 a-和其他字符,将其替换\\1为捕获组的反向引用 ( )

sub("^[^-]+-([^-]+)-.*", "\\1", str1)
#[1] "9045"  "GT200"
Run Code Online (Sandbox Code Playgroud)

或者使用str_extract正则表达式查找来匹配一个或多个不-跟在-. 该str_extract只提取的第一个实例,以获得预期的输出

str_extract(str1, "(?<=-)[^-]+")
#[1] "9045"  "GT200"
Run Code Online (Sandbox Code Playgroud)

数据

str1 <- c("DT-9045-BIN1-C-A1", "DT-GT200-BIN5-E-A2")
Run Code Online (Sandbox Code Playgroud)