2016-12-16 5 views
3

ich einen weißen Raum mit ONE Backslash und ein Leerzeichen wie diese ersetzen möchten:Ersetzen Leerzeichen mit einem einzigen Schrägstrich

"foo bar" --> "foo\ bar" 

fand ich, wie man mit multiple backslashes zu ersetzen, aber war nicht in der Lage, es zu einer Anpassung einzelner Backslash.

habe ich versucht, diese so weit:

x <- "foo bar" 
gsub(" ", "\\ ", x) 
# [1] "foo bar" 

gsub(" ", "\\\ ", x) 
# [1] "foo bar" 

gsub(" ", "\\\\ ", x) 
# [1] "foo\\ bar" 

jedoch alle Ergebnisse nicht erfüllen meine Bedürfnisse. Ich brauche die Ersetzung, um dynamisch Dateipfade zu erstellen, die Ordner mit Namen wie

/some/path/foo bar/foobar.txt enthalten.

Um sich für Shell-Befehle in system() weißen Räumen zu verwenden mit einem \ zu

/some/path/foo\ bar/foobar.txt verlassen werden.

Wissen Sie, wie Sie dieses Problem lösen können?

+0

vorwärts slashes sind besser für diese –

+0

Ich habe meine Frage bearbeitet, um die Verwendung zu demonstrieren. – loki

+0

Sie * können * in der Lage sein, den Pfad mit Leerzeichen in Anführungszeichen zu setzen, um es in 'system()' zu verwenden ... –

Antwort

5

Ihr Problem ist eine Verwechslung zwischen dem Inhalt eines Strings und seine Darstellung. Wenn Sie in R eine Zeichenfolge in der gewöhnlichen Weise auszudrucken werden Sie nie sehen einen einzelnen Schrägstrich (es sei denn, es wird ein Sonderzeichen bezeichnet, zB print("y\n"). Wenn Sie cat() stattdessen verwenden, werden Sie nur einen einzigen Schrägstrich sehen.

x <- "foo bar" 
y <- gsub(" ", "\\\\ ", x) 
print(y) 
## [1] "foo\\ bar" 
cat(y,"\n") ## string followed by a newline 
## foo\ bar 

Es gibt 8 Zeichen in der Zeichenfolge;. 6 Buchstaben, ein Leerzeichen und die Backslash

nchar(y) ## 8 

Zum Vergleich \n (Neue-Zeile-Zeichen) betrachten

0.

Wenn Sie Dateipfade erstellen, ist es möglicherweise einfacher, stattdessen Schrägstriche zu verwenden - Schrägstriche funktionieren als Dateitrennzeichen in R auf allen Betriebssystemen (sogar Windows). Oder sehen Sie sich file.path() an. (Ohne genau zu wissen, was Sie versuchen, kann ich nicht mehr sagen.)

4

Um ein Leerzeichen mit einem Backslash und einem Leerzeichen zu ersetzen, müssen Sie nicht einmal regulären Ausdruck verwenden, verwenden Sie Ihren ersten Versuch gsub(" ", "\\ ", x) mit fixed=TRUE:

> x <- "foo bar" 
> res <- gsub(" ", "\\ ", x, fixed=TRUE) 
> cat(res, "\n") 
foo\ bar 

Siehe eine online R demo

Die cat Funktion der "echte", wörtlichen Schrägstriche zeigt.

Verwandte Themen