ricardo ricardo - 23 days ago 7
R Question

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!).

Answer

Here are a few solutions:

> sub("^(.*)[.].*", "\\1", "abc.com.foo.bar") # 1
[1] "abc.com.foo"

> sub("[.][^.]*", "", "abc.com.foo.bar") # 2
[1] "abc.foo.bar"

> 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"          
>
> gsub("^[.]*|[.][^.]*$", "", x, perl = TRUE) # 2a
[1] "abc.com.foo" "abc.com.foo" "vimrc"      
>
> file_path_sans_ext(sub("^[.]*", "", x)) # 3s
[1] "abc.com.foo" "abc.com.foo" "vimrc"