使用R中的regex从文件名中提取模式?

时间:2018-08-16 09:49:01

标签: r regex

我有以下字符串:

  

“ UNKNOWN _ {_ requestID ___ b9b6bcc4-c163-45d7-82d9-423a96cf5fe1 _,_ deviceID ___ 9c84f871-9e95-45d5-9335-12e7d42b96a0 _} _ 2018-08-15-15-43-01-296_529307b7-6316-4cdc-ab53

并且我想提取529307b7-6316-4cdc-ab53-2e1158c651c6部分(_和.txt之间的最后一部分)。

这是我要使用正则表达式尝试做的事情:

^\_\w\.txt,但是没有运气,我一直在玩这个游戏,请告诉我什么策略以及如何“攻击”这个游戏。

4 个答案:

答案 0 :(得分:3)

您可以使用

sub("^.*_(.*)\\.txt$", "\\1", x)

请参见regex demo

sub将执行一次seasrch并替换操作。如果字符串符合以下条件,它将找到一个匹配项:

  • ^字符串的开头
  • .*_-尽可能多的0个字符,直到最后一个_
  • (.*)-最多0个字符(从替换模式中捕获到第1组,之后由\1引用),
  • \\.txt$-.txt.必须转义以匹配文字点($)的末尾。

R demo

x <- "UNKNOWN_{_requestID___b9b6bcc4-c163-45d7-82d9-423a96cf5fe1_,_deviceID___9c84f871-9e95-45d5-9335-12e7d42b96a0_}_2018-08-15-15-43-01-296_529307b7-6316-4cdc-ab53-2e1158c651c6.txt"
sub("^.*_(.*)\\.txt$", "\\1", x)
## => [1] "529307b7-6316-4cdc-ab53-2e1158c651c6"

答案 1 :(得分:2)

这里使用的是工具中隐藏的宝石。

x <- "UNKNOWN_{_requestID___b9b6bcc4-c163-45d7-82d9-423a96cf5fe1_,_deviceID___9c84f871-9e95-45d5-9335-12e7d42b96a0_}_2018-08-15-15-43-01-296_529307b7-6316-4cdc-ab53-2e1158c651c6.txt"

out <- strsplit(x, "_")[[1]]
out <- out[length(out)]
tools::file_path_sans_ext(out)

[1] "529307b7-6316-4cdc-ab53-2e1158c651c6"

答案 2 :(得分:1)

请您尝试以下。

Element

输出如下。

Input

说明: :仅出于说明目的添加以下内容。

Element

其中输入变量gsub(".*_|\\.txt","",x) 的值如下。

[1] "529307b7-\n6316-4cdc-ab53-2e1158c651c6"

答案 3 :(得分:1)

应用2次子:

    text <- c("UNKNOWN_{_requestID___b9b6bcc4-c163-45d7-82d9-423a96cf5fe1_,_deviceID___9c84f871-9e95-45d5-9335-12e7d42b96a0_}_2018-08-15-15-43-01-296_529307b7-6316-4cdc-ab53-2e1158c651c6.txt" )
    sub("\\.txt.*", "", sub(".*\\_", "", text))