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:
- Comenzando desde el principio de la cadena, identificar el carácter en blanco más cercano (
) alrededor de la posición 25
- Si el residuo es menor a 5 caracteres de longitud, no hacer nada. De lo contrario, reemplazar ese carácter en blanco con
\n
- Identificar el siguiente carácter en blanco más cercano al final de los siguientes 25 caracteres
- 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.
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:(.{1,25})(?(?=(?!(.* ){1,5}.*)(.{1,5}$).*))( +|$\n?)
$1$2\n
Esto debería producir el resultado deseado: