0

我们有一堆格式的文件名:

filename1(412)(4141567).csv, filename2(4214985).csv, filename3(34543).csv, filename4(3456984).csv, filename5(34582).csv, filename6(jrh)(234145).csv

我们要做的是截断文件名,这样我们就只剩下

filename1(412),filename2,filename3,...,filename6(jrh). 

即切断名称的结尾,直到最后一个“(”括号。

我们不能使用子字符串,因为每个文件名的长度都不完全相同。我还发现了以下代码:

sub("(.*?)[(].*", "\\1", files)

也不起作用,因为某些文件名有两组括号。

4

2 回答 2

1

您发布的最后一个正则表达式非常接近,试试这个:

sub('(.*)\\(.*', '\\1', files)
于 2013-07-24T22:03:34.607 回答
0

您可以使用tools::file_path_sans_extwhich runs (仅删除文件扩展名):

sub("([^.]+)\\.[[:alnum:]]+$", "\\1", x)

编辑

我没有看到您也想删除 last (...)

f <- c("filename1(412)(4141567).csv", "filename2(4214985).csv", "filename3(34543).csv", "filename4(3456984).csv", "filename5(34582).csv", "filename6(jrh)(234145).csv")

sub("([^.]+)\\([^)]*\\)\\.[[:alnum:]]+$", "\\1", f)
#[1] "filename1(412)" "filename2"      "filename3"      "filename4"      "filename5"      "filename6(jrh)"
于 2013-07-24T21:26:00.067 回答