将匹配字符中的字符串移动到R中的新列

将匹配字符中的字符串移动到R中的新列,r,regex,string,R,Regex,String,我有一组如下格式的数据: 01: <00-00-00> foo bar <00-00-01> 02: <00-00-01> bar foo <00-00-02> 01:foo-bar 02:巴富 我想用grep删掉首字母 : <xyz> : 将括号字符串倾斜,并将其放置在名为V2的新列中。最后的 <xyz> 每行上的尖括号字符串也应放置在新列V3中 这些括号中的字符串是可变的;我想捕捉这些,不管它们的性质如何,

我有一组如下格式的数据:

01: <00-00-00> foo bar <00-00-01>
02: <00-00-01> bar foo <00-00-02>
01:foo-bar
02:巴富
我想用grep删掉首字母

: <xyz>
将括号字符串倾斜,并将其放置在名为V2的新列中。最后的

<xyz>

每行上的尖括号字符串也应放置在新列V3中

这些括号中的字符串是可变的;我想捕捉这些,不管它们的性质如何,只要它们位于开括号和闭括号之间。每行上第一个括号内的字符串与最后一行的区别在于后面的“:”。我试过用这个,但不起作用:

data$timestamp.start <- grep("\\: <[^\\>]*\\>", as.character(data$V2), perl = TRUE)

data$timestamp.start假设您有以下数据帧

df1223 <- structure(list(V1=c("01: <00-00-00> foo bar <00-00-01>"),V2=c("02: <00-00-01> bar foo <00-00-02>")),V3='NULL', class = ("data.frame"))

df1223这样就可以了。无可否认,仅仅使用capture和character类有点笨拙:

 df1223 <- data.frame(V1=c("01: <00-00-00> foo bar <00-00-01>",
                           "02: <00-00-01> bar foo <00-00-02>"), 
                      stringsAsFactors=FALSE)

 df1223$V2 <- sub("^[^<]+([<][^>]+[>]).+$", "\\1", df1223$V1)
 df1223$V3 <- sub("^[^<]+[<][^>]+[>][^<]+([<][^>]+[>]).?$", "\\1", df1223$V1)
 df1223
#-----------
                                 V1         V2         V3
1 01: <00-00-00> foo bar <00-00-01> <00-00-00> <00-00-01>
2 02: <00-00-01> bar foo <00-00-02> <00-00-01> <00-00-02>

df1223 df1223对象不是问题中说明的数据帧这基本上解决了它!我添加了一些代码来消除V3列中第二组括号中没有包含的字符串,但是这个解决方案完成了跟踪,谢谢!这是第一个捕获类所匹配的。阅读
?regex
中的相关内容。
gsub("([0-9]+: )(<[^<]*)(<.*>)","\\3",df1223$V1)
 df1223 <- data.frame(V1=c("01: <00-00-00> foo bar <00-00-01>",
                           "02: <00-00-01> bar foo <00-00-02>"), 
                      stringsAsFactors=FALSE)

 df1223$V2 <- sub("^[^<]+([<][^>]+[>]).+$", "\\1", df1223$V1)
 df1223$V3 <- sub("^[^<]+[<][^>]+[>][^<]+([<][^>]+[>]).?$", "\\1", df1223$V1)
 df1223
#-----------
                                 V1         V2         V3
1 01: <00-00-00> foo bar <00-00-01> <00-00-00> <00-00-01>
2 02: <00-00-01> bar foo <00-00-02> <00-00-01> <00-00-02>