代码之家  ›  专栏  ›  技术社区  ›  SteveS

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

  •  2
  • SteveS  · 技术社区  · 6 年前

    我有以下字符串:

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

    下面是我使用regex要做的:

    ^\_\w\.txt

    4 回复  |  直到 6 年前
        1
  •  3
  •   Wiktor Stribiżew    6 年前

    你可以用

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

    regex demo

    sub 将执行单个seasrch和replace操作。如果字符串符合以下条件,它将找到匹配项:

    • ^ 字符串开头
    • .*_ -任何0+字符,尽可能多,直到最后一个 _
    • (.*) \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"
    
        2
  •  2
  •   Roman LuÅ¡trik    6 年前

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

    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"
    
        3
  •  1
  •   Nar    6 年前

        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)) 
    
        4
  •  1
  •   RavinderSingh13 Nikita Bakshi    6 年前

    你能试试下面的吗。

    gsub(".*_|\\.txt","",x)
    

    输出如下。

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

    说明: 添加以下内容仅供解释之用。

    gsub(     ##Using gsub(Global substitution function of R to perform multiple substitution on variables)
    ".*_      ##Mentioning REGEX to select everything from starting till _(underscore)
    |         ##|(pipe) defines OR so it should match either previous or coing REGEX in varibale's value.
    \\.txt"   ##\\. means escaping DOT so that DOT should be treated as a DOT not with its special meaning so it should match string .txt
    ,""       ##If above mentioned REGEXs any one of them OR both matches then substitute them with "" means NULL.
    ,x)       ##Mentioning variable named x on which we have to perform gsub.
    

    x 的值如下。

    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"