Formato de cadena RegEx en Notepad++

Formato de cadena RegEx en Notepad++

Soy bastante bueno en RegEx, pero hay una cosa que parece que no puedo entender cómo funciona.

¿Cómo se buscaría/reemplazaría en NotePad++ y se aseguraría de que la salida tenga una longitud fija, mientras que la entrada puede ser flexible?

Por ejemplo, hacer una expresión regular en esto: 23-6-2016para convertirse en: 23-06-2016(0 extra para 06, pero no si es 12, por ejemplo)

Otra opción es crear esto:

TestStringy Testse convertiría en
TestString______________________(espacios extra.)
Test____________________________(espacios extra.)

Por supuesto, la idea aquí es hacer una búsqueda/reemplazo masivo donde todos los resultados tengan la misma longitud.

Por favor explique el pensamiento detrás de esto.

EDITAR: para dar una idea de los datos con los que estoy trabajando, aquí hay una fila de ejemplo que necesito procesar:

12345678    TXT 19700101    0   100 20160624    100 Comment text
12345678    TXT 19700101    100 100,25  20160624    0,25    Comment text
12345678    TXT 19700101    100,25  100,5   20160624    0,25    Comment text

Tenga en cuenta que están separados por pestañas. El primer 0 en la primera línea debe tener el formato 0,00, el 100 como 100,00, pero el 12345678 y las fechas no deben tener el formato ,00. Los últimos 100,5 deben tener el formato 100,50.

Olvidé el tema de las citas, así que eso es menos importante en este momento.

Respuesta1

En respuesta a:

12345678 TXT 19700101 0 100 20160624 100 Texto del comentario
12345678 TXT 19700101 100 100,25 20160624 0,25 Comentar texto
12345678 TXT 19700101 100,25 100,5 20160624 0,25 Comentar texto

Para la cuarta columna:
^((?:\S+\s+){3}\d+)(\s)a \1,0\2
^((?:\S+\s+){3}\d+,\d)(\s)a\10\2

Para la quinta/séptima columna:
similar a lo anterior, simplemente reemplace {3}con {4}/ {6}en la regla respectivamente

Explicación
1ra regla

El1ra reglase añade ,0a números sin ,. Ahora todos los números deben tener ,\d.

2da regla

El2da reglaagrega 0a a aquellos con un solo dígito después de la coma.

Como para(?:):grupo sin captura, las columnas anteriores ya están capturadas, por \1lo que no es necesaria ninguna captura adicional.

Esto solo rellena el número con 2 decimales. Para rellenar una cantidad arbitraria, utilice el pad excessively, then trimenfoque.

¿Última palabra?
En mi opinión, las expresiones regulares simples como en notepad++ son inadecuadas para esta tarea. Algunas secuencias de comandos básicas como bash o perl habrían manejado esto con mucha mayor legibilidad.

Respuesta2

Sección A: Almohadilla de longitud específica

Para rellenar líneas con N caracteres usando expresiones regulares, agregue N espacios al final de la línea, luego agrupe los primeros N caracteres reemplazando el resto.

Paso 1: agregar caracteres de relleno

Buscar: $Reemplazar:______________________________

Al final de la línea agregue 30 espacios. (Usé guiones bajos ya que los espacios no se formateaban en la publicación).

Paso 2: Recortar 30 caracteres a la izquierda

Para rellenar una fecha delimitada por guiones al principio de una línea, haga coincidir cada sección en consecuencia.

Buscar: ^([[:print:]]{0,30}).*$ Reemplazar con\1

Al principio de la línea, reemplace un grupo de hasta treinta caracteres imprimibles seguido de los caracteres restantes del grupo.

Para elegir una longitud de línea diferente, use n espacios en el Paso 1 y luego reemplace 30 con la longitud en el Paso 2.

Sección B: Línea que comienza con la fecha

Pase 1 (día del mes):

Encuentra qué: ^([0-9])- Reemplazar con:0\1-

Reemplace el patrón (línea que comienza con un solo dígito seguido de un guión) con el cero rellenado, el dígito y el guión.

Pase 2 (mes):

Encuentra qué: -([0-9])- Reemplazar con:-0\1-

Reemplace el patrón (un solo dígito entre dos guiones) con un guión, el cero relleno, el dígito y el guión.

información relacionada