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)

一部のファイル名には 2 組の括弧が含まれているため、どちらも機能しません。

4

2 に答える 2

1

あなたが投稿した最後の正規表現はかなり近いです。これを試してください:

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

tools::file_path_sans_extwhich runs (ファイル拡張子のみを削除する) を使用できます。

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

編集

最後の も削除したいとは思いませんでした(...):

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 に答える