我試圖列出文件不以特定的字符串開始的文件夾中。我嘗試使用下面的正則表達式,但沒有成功。我想列出不以「SH」開頭的文件。這給了我一個語法錯誤:正則表達式來查找文件不是從一個特定的字符串開始與list.files()
myFiles = list.files(pattern = "^((?!SH).)*\\.csv")
我試圖列出文件不以特定的字符串開始的文件夾中。我嘗試使用下面的正則表達式,但沒有成功。我想列出不以「SH」開頭的文件。這給了我一個語法錯誤:正則表達式來查找文件不是從一個特定的字符串開始與list.files()
myFiles = list.files(pattern = "^((?!SH).)*\\.csv")
您可以使用下面的正則表達式來解決缺乏perl=T
支持在list.files()
:
^(.|[^S].*|.[^H].*)\\.csv
這裏是a demo of how this regex work
這REG ex允許任何1個字符的文件名,或者2個字符的文件名,在開始時不包含SH
以及任何其他文件名。
因此,使用
myFiles = list.files(pattern = "^(.|[^S].*|.[^H].*)\\.csv")
謝謝。正則表達式工具很酷! – SriniShine
您可以嘗試grep
:
grep("^((?!SH).)*\\.csv", list.files(), perl=T, value=T)
感謝博維爾上校。你的解決方案也適用。 – SriniShine
雖然list.files
允許進行匹配的正則表達式,它不會(出現),以有grep
或gsub
了充分的靈活性或gregexp
,如help('regex')
中所述,具體而言,它沒有perl
參數與模式一起傳遞。
然而,下面應該做的伎倆(假設你不想要的所有文件開始與SH,但.csv
結束。
list.files(pattern = '^[^SH].+\\.csv$')
謝謝mnel。這個也可以。 – SriniShine
此功能列表中的所有文件不開始 「SH」,並與名爲 「.csv」
list.files()[!grepl("^SH.*\\.csv$",list.files())]
,或者如果你想忽略的情況下結束,請使用ignore.case=T
:
list.files()[!grepl("^SH.*\\.csv$",list.files(),ignore.case=T)]
謝謝nurandi。但是,表達式會導致所有文件和文件夾(不會過濾csv文件)不以SH開頭。 – SriniShine
@stribizhev答案很酷。但是,它也列出了文件夾。添加'myFiles = myFiles [!file.info(myFiles)$ isdir]'來排除文件夾 – nurandi
試試'myFiles = list.files(pattern =「^(?! SH)。* \\。csv」,perl = T)'。 –
感謝您的回覆。但是R似乎並不認可perl = T。我需要爲此使用一個庫嗎? – SriniShine
如果不接受'perl = T',請嘗試使用^「^ S]。* \\。csv | ^。[^ H]。* \\。csv | ^。\\。csv」'。或者更緊湊的'^(。| [^ S]。* |。[^ H]。*)\\。csv'。 –