如何用正则表达式修剪字符串?

时间:2015-10-08 08:31:09

标签: r

我有非常大的文件名,我想修剪它们。 文件名是这样的

dgfs_adf_vdsvs_sjfj_dbsd_vsdvv.txt
scs_adaca_vdscvs_fj_dsd_vsdvv.txt

我只想保留第一个破折号和第4个破折号之间的所有表达式,这些表达式转换为:

adf_vdsvs_sjfj
adaca_vdscvs_fj

有人会帮我这个吗?

2 个答案:

答案 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