我有一个grep
困惑我:我想删除字符串集合中最后一个句点之后的文本(我使用的是 R,所以perl
语法可用)。
例如,假设字符串是ABCD.txt
thisgrep
将返回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)
要在一行中执行其中任何一项:
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"
我无法用 r 帮助你,而且我几乎忘记了 perl,但这适用于 JS(证明)和 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
正则表达式的语法相当普遍,所以我相信你可以采用它(也许只是摆脱/
)