remove text after final period in string

前端 未结 4 792
广开言路
广开言路 2020-12-03 13:14

I have a grep puzzle that\'s eluding me: I\'d like to remove the text following the final period in a collection of strings (i am using R, so perl

相关标签:
4条回答
  • 2020-12-03 13:20

    You can use sub for example like this:

    sub('(.*)[.](.*)','\\1',c('abc.com.foo.bar','ABCD.txt'))
    [1] "abc.com.foo" "ABCD"  
    
    0 讨论(0)
  • 2020-12-03 13:21

    And a non-regex answer for no reason whatsoever:

    test <- c("abc.com.foo.bar","ABCD.txt")
    sapply(strsplit(test,"\\."), function(x) paste0(head(x,-1),collapse=".") )
    #[1] "abc.com.foo" "ABCD"
    
    0 讨论(0)
  • 2020-12-03 13:22

    Here are a few solutions:

    sub("^(.*)[.].*", "\\1", "abc.com.foo.bar") # 1
    ## [1] "abc.com.foo"
    
    library(tools)
    file_path_sans_ext("abc.com.foo.bar") # 3
    ## [1] "abc.com.foo"
    

    ADDED. Regarding your comment asking to remove leading periods, simplest is to just feed this into any of the above where x is the input string:

    sub("^[.]*", "", x)
    

    To do any of them in one line:

    x <- c("abc.com.foo.bar", ".abc.com.foo.bar", ".vimrc")
    
    sub("^[.]*(.*)[.]?.*$", "\\1", x) # 1a
    ## [1] "abc.com.foo.bar" "abc.com.foo.bar" "vimrc"          
    
    file_path_sans_ext(sub("^[.]*", "", x))
    ## [1] "abc.com.foo" "abc.com.foo" "vimrc" 
    
    0 讨论(0)
  • 2020-12-03 13:28

    I cannot help you with r and I almost forgot perl, but this works both in JS (proof) and PHP

    /\.[A-Za-z]+$/     -->    replace this with empty string ""
      ^    ^    ^
      |    |    |
      |    |    end of line
      |    only chars (you can add 0-9 if numbers are also present)
      dot before last chars
    

    the syntax of regex is rather common, so I'm sure you can adopt it (maybe just get rid of /)

    0 讨论(0)
提交回复
热议问题