我有一个躲过我的grep
谜题:我想删除字符串集合中最后一段时间后的文本(我正在使用R,因此可以使用perl
语法)。
例如,假设字符串为ABCD.txt
,此grep
将返回ABCD
,如果文字为abc.com.foo.bar
,则会返回abc.com.foo
。
非常感谢任何帮助(我认为我不能再喝咖啡了!)。
答案 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
正则表达式的语法相当普遍,所以我相信你可以采用它(也许只是摆脱/
)