How to extract everything until first occurrence of pattern

前端 未结 4 1690
夕颜
夕颜 2021-02-19 00:22

I\'m trying to use the stringr package in R to extract everything from a string up until the first occurrence of an underscore.

What I\'ve tried

相关标签:
4条回答
  • 2021-02-19 00:42

    To get L0, you may use

    > library(stringr)
    > str_extract("L0_123_abc", "[^_]+")
    [1] "L0"
    

    The [^_]+ matches 1 or more chars other than _.

    Also, you may split the string with _:

    x <- str_split("L0_123_abc", fixed("_"))
    > x
    [[1]]
    [1] "L0"  "123" "abc"
    

    This way, you will have all the substrings you need.

    The same can be achieved with

    > str_extract_all("L0_123_abc", "[^_]+")
    [[1]]
    [1] "L0"  "123" "abc"
    
    0 讨论(0)
  • 2021-02-19 00:46

    The regex lookaround should be

    str_extract("L0_123_abc", ".+?(?=_)")
    #[1] "L0"
    
    0 讨论(0)
  • 2021-02-19 01:02

    Using gsub...

    gsub("(.+?)(\\_.*)", "\\1", "L0_123_abc")
    
    0 讨论(0)
  • 2021-02-19 01:03

    You can use sub from base using _.* taking everything starting from _.

    sub("_.*", "", "L0_123_abc")
    #[1] "L0"
    

    Or using [^_] what is everything but not _.

    sub("([^_]*).*", "\\1", "L0_123_abc")
    #[1] "L0"
    

    or using substr with regexpr.

    substr("L0_123_abc", 1, regexpr("_", "L0_123_abc")-1)
    #substr("L0_123_abc", 1, regexpr("_", "L0_123_abc", fixed=TRUE)-1) #More performant alternative
    #[1] "L0"
    
    0 讨论(0)
提交回复
热议问题