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.

Cómo realizar el ajuste de texto sin añadir una nueva línea si el residuo es corto?

Descripción

Supongamos que tengo muchas cadenas, algunas de ellas son muy largas:

Aim for the moon. If you miss, you may hit a star. – Clement Stone
Nothing about us without us

Quiero tener un envoltorio de texto que realice el siguiente algoritmo:

  1. Comenzando desde el principio de la cadena, identificar el carácter en blanco más cercano () alrededor de la posición 25
  2. Si el residuo es menor a 5 caracteres de longitud, no hacer nada. De lo contrario, reemplazar ese carácter en blanco con \n
  3. Identificar el siguiente carácter en blanco más cercano al final de los siguientes 25 caracteres
  4. Volver al paso 2 hasta el final de la línea

Entonces, el texto se reemplazará por:

Aim for the moon. If you\nmiss, you may hit a star.\n– Clement Stone
Nothing about us without us

Intento 1

Consultando Wrapping Text With Regular Expressions

  • Patrón de coincidencia: (.{1,25})( +|$\n?)
  • Patrón de reemplazo: $1\n

Pero esto producirá Nothing about us without\nus, lo cual no es preferible.

Intento 2

Usando una Construcción de anticipación en un If-Then-Else Conditionals:

  • Patrón de coincidencia: (.{1,25})(?(?=(.{1,5}$).*))( +|$\n?)
  • Patrón de reemplazo: $1$2\n

Aún produce Nothing about us without\nus, lo cual no es preferible.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Intento 3

    Agregando una búsqueda sin éxito negativa (?!(.* ){1,5}.*) para excluir los casos en los que los siguientes 5 caracteres después del espacio más cercano también sean espacios en blanco:

    • Patrón de coincidencia: (.{1,25})(?(?=(?!(.* ){1,5}.*)(.{1,5}$).*))( +|$\n?)
    • Patrón de reemplazo: $1$2\n

    Esto debería producir el resultado deseado:

    Apunta a la luna. Si fallas,
    puedes alcanzar una estrella.
    - Clement Stone
    Nada sobre nosotros sin nosotros
    

Comments are closed.