es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Mejorando la legibilidad de la generación automática de texto basada en una consulta de base de datos.

Estoy tratando de mejorar la legibilidad de la generación automática de texto basada en una consulta de base de datos.

¿Hay alguna forma ordenada de realizar estas sustituciones? ¿Se puede hacer lo siguiente en un solo comando en lugar de seis?

x<-c("Te( )st", "Test()","Test ()", "Test ( )", "Test ,,","Test,, ", "Test , ")
out<-c("Test", "Test", "Test", "Test", "Test,", "Test, ", "Test,")

x<-gsub(pattern = "( ", replacement = "(", x, fixed = T)
x<-gsub(pattern = " )", replacement = ")", x, fixed = T)
x<-gsub(pattern = " ,", replacement = ",", x, fixed = T)
x<-gsub(pattern = "()\"", replacement = "", x, fixed = T)
x<-gsub(pattern = ",,", replacement = ",", x, fixed = T)
x<-gsub(pattern = " ,", replacement = ",", x, fixed = T)
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Sí, puedes realizar todas las sustituciones en un solo comando utilizando expresiones regulares. Aquí tienes un ejemplo:

    x <- c("Te( )st", "Test()", "Test ()", "Test ( )", "Test ,,", "Test,, ", "Test , ")
    out <- gsub(pattern = "\\s*([(),])\\s*", replacement = "\\1", x)
    

    El argumento pattern utiliza una expresión regular para encontrar cualquier espacio (\\s*) seguido de uno de los caracteres entre paréntesis ([(),]), y luego más espacios (\\s*). Los paréntesis capturan el carácter encontrado, que luego se referencia en el argumento replacement utilizando \\1.

    Este solo comando debería producir el mismo resultado que los 6 comandos del bloque de código original.

Comments are closed.