regex - R-gsub reemplazando barras invertidas
(1)
Esto es lo que necesitas:
gsub("////", "////////", "//")
[1] "////"
La razón por la que necesita cuatro barras invertidas para representar una barra invertida literal es que
"/"
es un carácter de escape en ambas cadenas R y para el motor de expresiones regulares al que finalmente está pasando sus patrones.
Si estuviera hablando directamente con el motor de expresiones regulares, usaría
"//"
para indicar una barra diagonal inversa.
Pero para que R pase
"//"
al motor de expresiones regulares, debe escribir
"////"
.
(Si solo desea duplicar las barras invertidas, es posible que desee utilizar esto en su lugar):
gsub("//", "////", "//", fixed=TRUE)
[1] "////"
Me gustaría usar
gsub
para reemplazar cada aparición de una barra diagonal inversa en una cadena con 2 barras diagonales inversas.
Actualmente, lo que he probado es
gsub("////", "//", x)
.
Sin embargo, esto no parece funcionar.
Sin embargo, si cambio la expresión para reemplazar cada barra invertida con "a", funciona bien.
> gsub("////", "//", "//")
[1] ""
> gsub("////", "a", "//")
[1] "a"
> gsub("////", "////", "//")
[1] "//"
El último personaje es solo una barra invertida;
R solo imprime 2 porque imprime caracteres escapados con la barra invertida.
El uso de
nchar
confirma que la longitud es 1.
¿Qué causa esta funcionalidad?
El segundo argumento para
gsub
no es una expresión regular, por lo que tener 4 barras diagonales inversas en el literal de cadena debe convertirse en un carácter con 2 barras diagonales inversas.
Tiene aún menos sentido que la primera llamada
gsub
anterior devuelva una cadena vacía.