regex - return all before the second occurrence

前端 未结 4 1415
天命终不由人
天命终不由人 2020-12-08 11:17

Given this string:

DNS000001320_309.0/121.0_t0

How would I return everything before the second occurrence of \"_\"?

DNS0000         


        
4条回答
  •  伪装坚强ぢ
    2020-12-08 12:00

    The following script:

    s <- "DNS000001320_309.0/121.0_t0"
    t <- gsub("^([^_]*_[^_]*)_.*$", "\\1", s)
    t
    

    will print:

    DNS000001320_309.0/121.0
    

    A quick explanation of the regex:

    ^         # the start of the input
    (         # start group 1
      [^_]*   #   zero or more chars other than `_`
      _       #   a literal `_`
      [^_]*   #   zero or more chars other than `_`
    )         # end group 1
    _         # a literal `_`
    .*        # consume the rest of the string
    $         # the end of the input
    

    which is replaced with:

    \\1       # whatever is matched in group 1
    

    And if there are less than 2 underscores, the string is not changed.

提交回复
热议问题