2015-10-19 133 views
5

我想提取第一個反斜槓前的字符串部分,但我似乎無法讓它正常工作。R:反斜槓上的strsplit()

我已經嘗試了多種方式讓它工作,基於strsplit的手冊頁和網上搜索後。

在我的實際情況,字符串都在一個數據幀是我從一個數據庫連接得到,但我可以簡單地用下面的情況:

 
> strsplit("BLAAT1\022E:\\BLAAT2\\BLAAT3","\\",fixed=TRUE) 
[[1]] 
[1] "BLAAT1\022E:" "BLAAT2"  "BLAAT3" 

> strsplit("BLAAT1\022E:\\BLAAT2\\BLAAT3","\\",fixed=FALSE) 
Error in strsplit("BLAAT1\022E:\\BLAAT2\\BLAAT3", "\\", fixed = FALSE) : 
    invalid regular expression '\', reason 'Trailing backslash' 

> strsplit("BLAAT1\022E:\\BLAAT2\\BLAAT3","\\\\",fixed=TRUE) 
[[1]] 
[1] "BLAAT1\022E:\\BLAAT2\\BLAAT3" 

> strsplit("BLAAT1\022E:\\BLAAT2\\BLAAT3","\\\\",fixed=FALSE) 
[[1]] 
[1] "BLAAT1\022E:" "BLAAT2"  "BLAAT3"  

預期的輸出也將BLAAT1之間分裂的\ 022E:

在此先感謝

+0

你想4種元素作爲預期的輸出或只是'BLAAT'和'02E:\\ \\ BLATT2作爲BLAAT3'第二分。順便說一下,'\ 022'這是一個Unicode字符 – akrun

+2

你在這裏有ASCII字符,'strsplit(「BLAAT1 \ 022E:\\ BLAAT2 \\ BLAAT3」,「[[:cntrl:]]」)'給你你什麼想? –

+0

'「\ 022」'是一個字符。 – BenBarnes

回答

6

這裏是一個正則表達式,你可以使用:它處分割\non-printable character

strsplit("BLAAT1\022E:\\BLAAT2\\BLAAT3","[\\\\]|[^[:print:]]",fixed=FALSE) 
# [1] "BLAAT1" "E:"  "BLAAT2" "BLAAT3" 

IDEONE demo

+1

謝謝,沒有意識到\ 022是一個不可打印的字符。 –