2015-10-19 6 views
5

Ich versuche, den Teil der Zeichenfolge vor dem ersten Backslash zu extrahieren, aber ich kann nicht scheinen, damit es richtig funktioniert.R: strsplit auf Backslash ()

Ich habe mehrere Möglichkeiten ausprobiert, um es zu arbeiten, basierend auf der Handbuchseite für strsplit und nach der Online-Suche.

In meiner aktuellen Situation sind die Saiten in einem Datenrahmen, die ich aus einer Datenbankverbindung bekommen, aber ich kann die Situation mit dem folgenden vereinfachen:

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

Die erwartete Ausgabe auch auf dem \ zwischen BLAAT1 aufgeteilt würde und 022E:

Vielen Dank im Voraus

+0

Haben Sie 4 Elemente wie erwartet ausgegeben werden sollen oder nur 'BLAAT' und' 02E: \\ Blatt2 \\ BLAAT3' als das zweite Split. BTW, '\ 022' es ist ein Unicode-Symbol – akrun

+2

Sie haben hier ASCII-Zeichen, tut' strsplit ("BLAAT1 \ 022E: \\ BLAAT2 \\ BLAAT3", "[[::]:") "gibt Ihnen, was Sie wollen? –

+0

'" \ 022 "' ist ein Zeichen. – BenBarnes

Antwort

6

Hier ist ein regulärer Ausdruck, die Sie verwenden können: es spaltet bei \ und ein non-printable character:

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

Siehe IDEONE demo

+1

Danke, habe nicht erkannt, dass \ 022 ein nicht druckbares Zeichen war. –