Quiero hacer coincidir nulo o espacio como opcional desde el comienzo de la línea. La línea es la siguiente:
Date Description Amount
null 12/05/2016 Asian Paints 2,150.65
13/05/2016 Nerolac GEB 5.86 22,512.65 Cr
14/05/2016 Hydra 12,412
La expresión regular que utilicé es:
regex_null = re.compile(r"^(?:null)?\s+(\d{2}/\d{2}/\d{4})\s+(.*?)\s+(\d[\d,]*\.\d{2}\s+(?:Cr)?)$", re.M)
Y lo que tengo es:
null 12/05/2016 Asian Paints 2,150.65
13/05/2016 Nerolac GEB 5.86 22,512.65 Cr
Entonces el nulo no es opcional. Actualmente se considera obligatorio. ¿Puedes ayudarme con esto?
Solución del problema
Puede usar esta expresión regular con grupos opcionales:
^\s*(?:null)?\s*(\d{2}/\d{2}/\d{4})\s+(.*?)\s+(\d[\d,]*(?:\.\d{2})?(\s+Cr)?)$
Demostración RegEx
Detalles RegEx:
^\s*(?:null)?\s*
: Coincidencia opcionalnull
con 0 o más espacios en blanco en ambos lados(\d{2}/\d{2}/\d{4})
: Cadena de fecha de coincidencia en el grupo de captura #1\s+
: Partido 1+ espacios en blanco(.*?)
: Matemáticas 0 o más caracteres en el grupo de captura #2\s+
: Partido 1+ espacios en blanco(\d[\d,]*
: Coincide con un dígito seguido de 0 o más dígitos/caracteres de coma(?:\.\d{2})?
: Coincide con puntos y dígitos opcionales(\s+Cr)?)
: Coincide con espacios en blanco opcionales 1+ seguidos deCr
$
: Fin
No hay comentarios:
Publicar un comentario