2015-10-08 48 views
-1

我有很大的文件名,我想修剪它们。 文件名都是这样如何使用正则表达式修剪字符串?

dgfs_adf_vdsvs_sjfj_dbsd_vsdvv.txt 
scs_adaca_vdscvs_fj_dsd_vsdvv.txt 

我只是想保持第一仪表板和仪表板4之间的所有表达其翻译成:

adf_vdsvs_sjfj 
adaca_vdscvs_fj 

会有人帮助我?

回答

1

您可以使用子,

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" 
+0

你能解释有点它是如何工作的? – user51661

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 
相关问题