2017-08-16 30 views
1

我想找到任何文件,以一個可能的前綴開頭,並以可能的後綴之一結束。文件匹配模式R與幾個可能的前綴和後綴

這裏是例如:

  1. 文件可以用「API」或「DB」或「S3」,隨後與一個「_」
  2. 那麼查詢的ID被顯示出來加上一個啓動「」性格
  3. 和文件名會結束與「JSON」或「SQL」或「TXT」的一個

我用下面的代碼

filesPattern = "[DB|API|S3]_.*.[JSON|SQL|TXT]$" 
LIST_OF_FILES = toupper(list.files(dirProcess, 
            pattern = filesPattern, 
            ignore.case = T)) 

這正莫名其妙,但不準確。首先,我不知道如何強制從這些前綴之一開始。第二個「。」未檢查後綴之前的字符。還有一些其他問題,我不確定我是否定義了可能的前綴和後綴?!

最後,我怎樣才能得到一個具有特定ID的文件?例如:

這些都是我的文件名:

[1] "API_GPT.TXT"  "API_GPTR.R"  "DB_COUNTRY.SQL" 
[4] "DB_DECISIONS.SQL" "S3_BUCKET_LIST.R" 

,我希望得到與ID =「決定」的文件。

+0

你的意思是你需要找到文件名以'API'或'DB'或'S3'開始,然後有'_'並以'.'結尾,然後'JSON' /'SQL' /'TXT '? '名單。files'不支持PCRE模式,據我所知,我刪除了'perl'標籤。試試'filesPattern =「^(DB | API | S3)_。* \\。(JSON | SQL | TXT)$」'模式。有一點是不清楚的:你想排除諸如'S3 __。SQL'之類的文件嗎? –

+0

此外,如果您使用'ignore.case = T' –

回答

1

[DB|API|S3]是托架表達式匹配單個字符:DB|APIS,或3

您可以使用

filesPattern = "^(DB|API|S3)_.*\\.(JSON|SQL|TXT)$" 
LIST_OF_FILES = list.files(dirProcess, pattern = filesPattern, ignore.case = TRUE) 

詳細

  • ^ - 串
  • 開始
  • (DB|API|S3) - 無論是3個替代品(DBAPIS3子)
  • _ - 下劃線
  • .* - 任何0+字符,儘可能多的
  • \\. - 字面.符號
  • (JSON|SQL|TXT) - 無論是3個替代品(JSONSQLTXT子串)的
  • $ - 字符串的結尾。

您不需要toupper(),因爲您正在使用ignore.case = TRUE參數,它使模式匹配不區分大小寫。

+0

謝謝,則不需要使用'toupper'。這正是我所期待的。只有一個問題我不明白你對PCRE模式的評論! –

+0

@MahdiJadaliha你用'perl'標籤標記了問題。它沒有任何意義,因爲1)它是一個R問題,與Perl無關,2)'list.files'不支持'perl'參​​數。 'gsub','grep','grepl','sub'' regexpr' ...他們支持'perl = TRUE',然後使用PCRE正則表達式來解析模式。 'list.files'模式只能由默認的TRE正則表達式引擎處理。 –

+0

明白了。非常感謝。 –