ricardo
ricardo

Reputation: 8425

remove text after final period in string

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 syntax is available).

For example, say the string is ABCD.txt this grep would return ABCD, and if the text was abc.com.foo.bar, it would return abc.com.foo.

Any help greatfully appreciated (i don't think i can drink any more coffee!).

Upvotes: 5

Views: 4901

Answers (4)

G. Grothendieck
G. Grothendieck

Reputation: 269644

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" 

Upvotes: 9

thelatemail
thelatemail

Reputation: 93813

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"

Upvotes: 3

vladkras
vladkras

Reputation: 17228

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 /)

Upvotes: 1

agstudy
agstudy

Reputation: 121568

You can use sub for example like this:

sub('(.*)[.](.*)','\\1',c('abc.com.foo.bar','ABCD.txt'))
[1] "abc.com.foo" "ABCD"  

Upvotes: 2

Related Questions