2017-01-03 4 views
3

Ich möchte meine R-Analyse mit Knitr ausgeben, und ich habe einen Text, der eine Reihe von Unterstrichen enthält. Ich muss sie entkommen lassen, also jeden _ in einen \_ verwandeln.Einfügen Backslashes mit gsub

Da der Backslash aber auch ein Sonderzeichen in Regex ist, habe ich keinen Weg gefunden, vor jedem Unterstrich einen einzelnen Backslash einzufügen. Es scheint, dass eine ungerade Anzahl von Backslashes einen Fehler erzeugt (ich denke, der letzte wird mit dem Unterstrich gepaart), aber der Versuch, mit geraden Zahlen zu entkommen, hat auch nicht funktioniert.

a <- "blah _ blah ___ blah" 
> gsub("_", "\\_", a) 
[1] "blah _ blah ___ blah" 
> gsub("_", "\\\\_", a) 
[1] "blah \\_ blah \\_\\_\\_ blah" 
> gsub("_", "\\\_", a) 
Error: '\_' is an unrecognized escape in character string starting ""\\\_" 
> gsub("_", "\_", a) 
Error: '\_' is an unrecognized escape in character string starting ""\_" 

Was ist der richtige Weg? Es muss nicht gsub und regex verwenden, aber ich brauche die Escapes einfach auf eine einzelne Zeichenfolge angewendet werden.

+0

Diese Frage ist * kein * ein Duplikat. Die Antwort auf die andere Frage ist, zwei umgekehrte Schrägstriche zu verwenden - Sie können in meinem Text sehen, dass ich es ausprobiert habe und es nicht funktioniert. – rumtscho

+0

Dies sind alles Dupes und das Problem - * Ersetzen durch '' '' '- ist ziemlich gut beschrieben. Akrun hat es viele Male beantwortet. Hier ist [meine Antwort] (http://stackoverflow.com/questions/41186399/reflacing-white-space-with-one-single-backslash/41186646#41186646). –

+0

@ WiktorStribiżew OK, tut mir leid, habe es jetzt. Der Teil "muss es durch die Katze laufen lassen" verwirrte mich tatsächlich. – rumtscho

Antwort

3

Wir brauchen die \

gsub("_", "\\\\_", a) 

zu entkommen Wenn wir es drucken, es ist nur eine einzige \

cat(gsub("_", "\\\\_", a)) 
#blah \_ blah \_\_\_ blah 

Wir haben es herausfinden können, mit nchar

nchar("\\") 
#[1] 1