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

使用gsub删除第一个字符之前的字符_

  •  1
  • BallerNacken  · 技术社区  · 6 年前

    gsub(".*_","",ldf[[j]]),1,nchar(gsub(".*_","",ldf[[j]]))-4)
    

    lfd

    Arof_07122016_2.csv 07122016 2 .但我不明白为什么会这样。如何使用此行只切断第一个下划线的from t中的字符并保留第二个下划线?

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

    sub("^[^_]*_([^_]*).*", "\\1", ldf[[j]])
    

    查看 regex demo

    • ^
    • [^_]* -0+个字符,而不是 _
    • ([^_]*) _
    • .*

    \1 在替换模式中,只保留结果中捕获的值。

    R demo

    v <- c("Arof_07122016_2.csv", "Another_99999_ccccc_2.csv")
    sub("^[^_]*_([^_]*).*", "\\1", v)
    # => [1] "07122016" "99999" 
    
        2
  •  2
  •   James    6 年前

    ?regex

    默认情况下,重复是贪婪的,因此 量词。(还有更多的量词允许

    所以你应该使用这个模式 ".*?_" gsub sub ^ 在正则表达式中。

    sub(".*?_","","Arof_07122016_2.csv")
    [1] "07122016_2.csv"
    gsub("^.*?_","","Arof_07122016_2.csv")
    [1] "07122016_2.csv"