如何在符号" _"之间提取子串和"。"

时间:2014-05-07 12:50:00

标签: r gsub

我有很多文件名,如下所示:

txt= "MA0051_IRF2.xml"

我想提取“_”和“。”之间的IRF2。我怎么在R?

这样做

4 个答案:

答案 0 :(得分:11)

要实现这一目标,您需要一个正则表达式

  • 匹配_:.*
  • 前面的(可选)任意字符串
  • 匹配文字_:[_]
  • 匹配下一个(但不包括)下一个。并将其存储在捕获组号中。 1:([^.]+)
  • 匹配文字。 :[.]
  • 匹配后的(可选)任意字符串。 :.*

在你打电话给gsub时,你就

  • 使用我们在上一步中构建的正则表达式
  • 用第一个捕获组的内容替换整个字符串:\\1(我们需要转义反斜杠,因此需要双反斜杠)

示例:

gsub(".*[_]([^.]+)[.].*", "\\1", "MA0051_IRF2.xml")

答案 1 :(得分:2)

gsub(".*_(.*)\\..*", "\\1", txt)
##"IRF2"

答案 2 :(得分:1)

使用stringr包的另一种可能性:

 str_extract(x, perl("(?<=_)(.+)(?=\\.)"))

答案 3 :(得分:1)

这是一个不需要正则表达式知识的可能解决方案:

txt <- "MA0051_IRF2.xml"

library(qdap)
genXtract(txt, "_", ".")

## _  :  . 
##  "IRF2"