文字列のコレクションの最後のgrepピリオドに続くテキストを削除したい (私は R を使用しているので、perl構文が利用可能です)。
たとえば、文字列がである場合、ABCD.txtこれgrepは を返しABCD、テキストがabc.com.foo.barである場合は を返しabc.com.fooます。
どんな助けでも大歓迎です(私はこれ以上コーヒーを飲むことができないと思います!)。
以下にいくつかの解決策を示します。
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"
追加した。先頭のピリオドを削除するように求めるコメントに関して、最も簡単なのは、これを上記xの入力文字列のいずれかにフィードすることです。
sub("^[.]*", "", x)
それらのいずれかを 1 行で実行するには:
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"
そして、何の理由もなく非正規表現の答え:
test <- c("abc.com.foo.bar","ABCD.txt")
sapply(strsplit(test,"\\."), function(x) paste0(head(x,-1),collapse=".") )
#[1] "abc.com.foo" "ABCD"
subたとえば、次のように使用できます。
sub('(.*)[.](.*)','\\1',c('abc.com.foo.bar','ABCD.txt'))
[1] "abc.com.foo" "ABCD"