Regex cómo hacer coincidir un personaje opcional

Tengo una expresión regular que creí que estaba funcionando correctamente hasta ahora. Necesito unirme a un personaje opcional. Puede estar allí o no.

Aquí hay dos cuerdas. La cadena superior coincide mientras que la inferior no. La ausencia de una sola letra en la cadena inferior es lo que lo hace fallar.

Me gustaría obtener una sola letra después de los 5 dígitos iniciales si está allí y si no, continúe obteniendo el rest de la cadena. Esta carta puede ser AZ .

Si elimino ([AZ]{1}) +.*? + ([AZ]{1}) +.*? + de la expresión regular, coincidirá con todo lo que necesito excepto la letra pero es algo importante.

 20000 K Q511195DREWBT E00078748521 30000 K601220PLOPOH Z00054878524 

Aquí está la expresión regular que estoy usando.

 /^([0-9]{5})+.*? ([AZ]{1}) +.*? +([AZ]{1})([0-9]{3})([0-9]{3})([AZ]{3})([AZ]{3}) +([AZ])[0-9]{3}([0-9]{4})([0-9]{2})([0-9]{2})/ 

Utilizar

 [AZ]? 

para hacer la carta opcional. {1} es redundante (Por supuesto, también podría escribir [AZ]{0,1} lo que significaría lo mismo, pero para eso está ? ).

Puede mejorar su expresión regular a

 ^([0-9]{5})+\s+([AZ]?)\s+([AZ])([0-9]{3})([0-9]{3})([AZ]{3})([AZ]{3})\s+([AZ])[0-9]{3}([0-9]{4})([0-9]{2})([0-9]{2}) 

Y, dado que en la mayoría de los dialectos de expresiones regulares, \d es lo mismo que [0-9] :

 ^(\d{5})+\s+([AZ]?)\s+([AZ])(\d{3})(\d{3})([AZ]{3})([AZ]{3})\s+([AZ])\d{3}(\d{4})(\d{2})(\d{2}) 

Pero: ¿realmente necesitas 11 grupos de captura separados? Y si es así, ¿por qué no captura el cuarto o último grupo de dígitos?

Puede hacer que la letra simple sea opcional al agregar un ? después de eso como:

 ([AZ]{1}?) 

El cuantificador {1} es redundante para que pueda soltarlo.

También debe marcar la letra simple como opcional:

 ([AZ]{1})? +.*? + 

o hacer toda la parte opcional

 (([AZ]{1}) +.*? +)?