在字符串的最后一个句点后删除文本

时间:2013-07-25 00:46:56

标签: r grep

我有一个躲过我的grep谜题:我想删除字符串集合中最后一段时间后的文本(我正在使用R,因此可以使用perl语法)。

例如,假设字符串为ABCD.txt,此grep将返回ABCD,如果文字为abc.com.foo.bar,则会返回abc.com.foo

非常感谢任何帮助(我认为我不能再喝咖啡了!)。

4 个答案:

答案 0 :(得分:8)

以下是一些解决方案:

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)

在一行中做任何一件事:

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" 

答案 1 :(得分:3)

无正当理由的答案无缘无故:

test <- c("abc.com.foo.bar","ABCD.txt")
sapply(strsplit(test,"\\."), function(x) paste0(head(x,-1),collapse=".") )
#[1] "abc.com.foo" "ABCD"

答案 2 :(得分:2)

您可以使用sub,例如:

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

答案 3 :(得分:1)

我无法帮助你,我几乎忘记了perl,但这在JS(proof)和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

正则表达式的语法相当普遍,所以我相信你可以采用它(也许只是摆脱/