R-正则表达式提取破折号和句点之间的字符串

Sha*_* A. 4 regex r

首先,如果这个问题太天真或者之前已经重复过,我深表歉意。我试图在论坛中找到它,但我将其作为问题发布,因为我未能找到答案。

我有一个数据框,其列名称如下;

head(rownames(u))

[1] "A17-R-Null-C-3.AT2G41240"       "A18-R-Null-C-3.AT2G41240"         "B19-R-Null-C-3.AT2G41240"      
[4] "B20-R-Null-C-3.AT2G41240"       "A21-R-Transgenic-C-3.AT2G41240" "A22-R-Transgenic-C-3.AT2G41240"
Run Code Online (Sandbox Code Playgroud)

我想要的是使用 R 中的正则表达式来提取第一个破折号和最后一个句点之间的字符串。

预期结果是,

[1] "R-Null-C-3"       "R-Null-C-3"         "R-Null-C-3"      
[4] "R-Null-C-3"       "R-Transgenic-C-3" "R-Transgenic-C-3"
Run Code Online (Sandbox Code Playgroud)

我尝试跟随但没有运气......

gsub("^[^-]*-|.+\\.","\\2", rownames(u))
gsub("^.+-","", rownames(u))
sub("^[^-]*.|\\..","", rownames(u))
Run Code Online (Sandbox Code Playgroud)

有人可以帮助我解决这个问题吗?

预先非常感谢。

沙尼.

Wik*_*żew 5

这是与以下一起使用的解决方案gsub

v <- c("A17-R-Null-C-3.AT2G41240", "A18-R-Null-C-3.AT2G41240", "B19-R-Null-C-3.AT2G41240", "B20-R-Null-C-3.AT2G41240", "A21-R-Transgenic-C-3.AT2G41240", "A22-R-Transgenic-C-3.AT2G41240")
gsub("^[^-]*-([^.]+).*", "\\1", v)
Run Code Online (Sandbox Code Playgroud)

查看IDEONE 演示

则表达式匹配

  • ^[^-]*- 零个或多个字符以外的字符-
  • -- 连字符
  • ([^.]+)- 第 1 组匹配并捕获除点之外的一个或多个字符
  • .*- 任何字符(甚至包括换行符,因为perl=T未使用),直到字符串末尾的任意次数。