我有非常大的文件名,我想修剪它们。 文件名是这样的
dgfs_adf_vdsvs_sjfj_dbsd_vsdvv.txt
scs_adaca_vdscvs_fj_dsd_vsdvv.txt
我只想保留第一个破折号和第4个破折号之间的所有表达式,这些表达式转换为:
adf_vdsvs_sjfj
adaca_vdscvs_fj
有人会帮我这个吗?
答案 0 :(得分:1)
您可以使用sub,
x <- c("dgfs_adf_vdsvs_sjfj_dbsd_vsdvv.txt",
"scs_adaca_vdscvs_fj_dsd_vsdvv.txt")
sub("^.*?_(.*?_.*?_.*?)_.*", "\\1", x)
# [1] "adf_vdsvs_sjfj" "adaca_vdscvs_fj"
.*?
非贪婪,停止匹配util找到第一个匹配。所以^.*?_
将匹配所有字符到第一个下划线,同样它继续。
或
sapply(strsplit(x, "_"), function(x) paste(c(x[2],x[3],x[4]),collapse="_"))
[1] "adf_vdsvs_sjfj" "adaca_vdscvs_fj"
答案 1 :(得分:0)
x = "dgfs_adf_vdsvs_sjfj_dbsd_vsdvv.txt" # long name
y = unlist(strsplit(x, "_")) # split on "_" and make vector
z = paste(y[2], y[3], y[4], sep = "_") # join elements 2-4