Tengo una oración general

\r\n sth ~ sth\r\nsth ~ sth ~ \r\n

Lo que quiero hacer es simplemente hacer \ r \ n nada como ""

Entonces el resultado es

\r\n sth ~ sthsth ~ sth ~ \r\n

Si uso regex

gsub("\\S\r\n\\S","\\S\\S",string)

Entonces el resultado es (el ejemplo es rolling \ r \ nstones)

\r\n sth ~ rollinSStones ~ sth ~ \r\n

¿Hay algún método para dejar la cadena?

\r\n sth ~ rollingstones ~ sth ~ \r\n

Necesito una solución general para dejar el otro \ r \ n solo \ r \ n

Gracias por leer.

2
user13232877 21 abr. 2020 a las 11:58

3 respuestas

La mejor respuesta

Puede usar \\b en lugar de \\S:

gsub("\\b\r\n\\b", "", "\r\n sth ~ sth\r\nsth ~ sth ~ \r\n")
#[1] "\r\n sth ~ sthsth ~ sth ~ \r\n"

O acercarse a lo que podría haber deseado con gsub("\\S\r\n\\S","\\S\\S",string)

gsub("(\\S)\r\n(\\S)", "\\1\\2", "\r\n sth ~ sth\r\nsth ~ sth ~ \r\n")
#[1] "\r\n sth ~ sthsth ~ sth ~ \r\n"
1
GKi 21 abr. 2020 a las 09:16

Puede usar gsub con doble referencia:

gsub("(sth)\r\n(sth)", "\\1\\2", string)
#[1] "\r\n sth ~ sthsth ~ sth ~ \r\n"

\\1 captura el primer grupo de captura, que es (sth)

\\2 captura el segundo grupo de captura, que es (el segundo) (sth)

0
Chris Ruehlemann 21 abr. 2020 a las 09:34

Podemos usar regex positivo de lookahead y lookbehind:

string <- '\r\n sth ~ sth\r\nsth ~ sth ~ \r\n'

gsub("(?<=\\S)\r\n(?=\\S)","",string, perl = TRUE)
#[1] "\r\n sth ~ sthsth ~ sth ~ \r\n"

Podemos usar la misma expresión regular en str_remove de stringr

stringr::str_remove(string, '(?<=\\S)\r\n(?=\\S)')

Esto eliminará solo '/r/n' de la cadena donde no le sigue un espacio en blanco manteniendo el carácter que no es un espacio en blanco tal como está.

0
Ronak Shah 21 abr. 2020 a las 09:04