2017-06-22 106 views
1

我試圖創建在R.我想在這裏如圖所示的模式正則表達式的模式,[R正則表達式匹配,直到最後一個點

file1 <- "example.txt" 
file2 <- "example.ffe.2f2.csv" 
files <- c(file1,file2) 

#pattern that matches everything up to, but not including last . 

pattern <- ".*(?=\.)" 
m <- regexpr(pattern, files) 

但是我上的圖案線得到一個錯誤說

Error: '\.' is an unrecognized escape in character string starting "".*(?=\." 

我想正則表達式匹配的file1exampleexample.ffe.2f2file2。任何建議/我做錯的事情?它在regex101.com上正常工作,所以我知道該模式是正確的。

+1

\\不是一個斜槓我認爲 –

+0

「\」是R.中的轉義字符,您需要使用「\\」作爲文字反斜槓。 –

+2

也使用'regexpr(pattern,files,perl = TRUE)',因爲您使用的是超越基本的分組類型。 –

回答

3

A (?=\.)正數lookahead。 TRE正則表達式(如果未指定perl=TRUE,則默認使用)不支持預覽。您必須使用PCRE正則表達式引擎來處理這種模式。

爲了正確地轉義.,使用文字\,必須在R字符串文字中將符號\加倍。但是,您可以通過將.放入括號表達式/字符類[.]中來避免這種情況。

您可以使用下面的代碼:

file1 <- "example.txt" 
file2 <- "example.ffe.2f2.csv" 
files <- c(file1,file2) 
regmatches(files, regexpr(".*(?=[.])", files, perl=TRUE)) 
## => [1] "example"   "example.ffe.2f2" 

online R demo

需要注意的是同樣的結果可以用

tools::file_path_sans_ext(files) 

是獲取文件名沒有擴展名(demo)獲得。

相關問題