2015-10-08 49 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 
相關問題