我有以下字符串:
“ 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
,但是没有运气,我一直在玩这个游戏,请告诉我什么策略以及如何“攻击”这个游戏。
答案 0 :(得分:3)
您可以使用
sub("^.*_(.*)\\.txt$", "\\1", x)
请参见regex demo
sub
将执行一次seasrch并替换操作。如果字符串符合以下条件,它将找到一个匹配项:
^
字符串的开头.*_
-尽可能多的0个字符,直到最后一个_
(.*)
-最多0个字符(从替换模式中捕获到第1组,之后由\1
引用),\\.txt$
-.txt
(.
必须转义以匹配文字点($
)的末尾。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))