5

文字列のコレクションの最後のgrepピリオドに続くテキストを削除したい (私は R を使用しているので、perl構文が利用可能です)。

たとえば、文字列がである場合、ABCD.txtこれgrepは を返しABCD、テキストがabc.com.foo.barである場合は を返しabc.com.fooます。

どんな助けでも大歓迎です(私はこれ以上コーヒーを飲むことができないと思います!)。

4

4 に答える 4

10

以下にいくつかの解決策を示します。

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" 
于 2013-07-25T01:01:51.603 に答える
3

そして、何の理由もなく非正規表現の答え:

test <- c("abc.com.foo.bar","ABCD.txt")
sapply(strsplit(test,"\\."), function(x) paste0(head(x,-1),collapse=".") )
#[1] "abc.com.foo" "ABCD"
于 2013-07-25T01:58:57.373 に答える
2

subたとえば、次のように使用できます。

sub('(.*)[.](.*)','\\1',c('abc.com.foo.bar','ABCD.txt'))
[1] "abc.com.foo" "ABCD"  
于 2013-07-25T00:58:48.727 に答える