2015-10-19 27 views
5

Sto cercando di estrarre la parte della stringa prima della prima barra retroversa, ma non riesco a far funzionare correttamente.R: strsplit su barra rovesciata ()

Ho provato diversi modi per farlo funzionare, in base alla pagina di manuale per strsplit e dopo la ricerca online.

Nella mia situazione attuale le stringhe sono in una dataframe, che mi da una connessione al database, ma in grado di semplificare la situazione con il seguente:

 
> 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"  

Il risultato atteso sarebbe anche dividere il \ tra i BLAAT1 e 022E:

Grazie in anticipo

+0

Vuoi 4 elementi come risultato atteso o semplicemente '' BLAAT' e 02E: \\ BLATT2 \\ BLAAT3' come il 2 ° divisione. BTW, '\ 022' è un simbolo unicode – akrun

+2

Qui hai caratteri ASCII, fa' strsplit ("BLAAT1 \ 022E: \\ BLAAT2 \\ BLAAT3", "[[: cntrl:]]") 'ti dà quello che volere? –

+0

'" \ 022 "' è un carattere. – BenBarnes

risposta

6

Ecco una regex che è possibile utilizzare: si divide in \ e un non-printable character:

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

Vedi IDEONE demo

+1

Grazie, non rendersi conto che \ 022 era un carattere non stampabile. –

Problemi correlati