文字列のコレクションの最後の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"