Tengo una expresión regular que pensé que funcionaba correctamente hasta ahora. Necesito hacer coincidir un personaje opcional. Puede estar allí o no.
Aquí hay dos cadenas. La cadena superior coincide, mientras que la inferior no. La ausencia de una sola letra en la cadena inferior es lo que hace que falle.
Me gustaría obtener la letra única después de los 5 dígitos iniciales si está allí y si no, continuar obteniendo el resto de la cadena. Esta carta puede ser A-Z
.
Si elimino ([A-Z]{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})+.*? ([A-Z]{1}) +.*? +([A-Z]{1})([0-9]{3})([0-9]{3})([A-Z]{3})([A-Z]{3}) +([A-Z])[0-9]{3}([0-9]{4})([0-9]{2})([0-9]{2})/
Puede hacer que la letra única sea opcional agregando un
?
después como:El cuantificador
{1}
es redundante, por lo que puede soltarlo.fuente
También debe marcar la letra única como opcional:
o hacer que toda la parte sea opcional
fuente
También puede usar expresiones regulares más simples diseñadas para su caso, como
(.*)\/(([^\?\n\r])*)
dónde$2
coincide con lo que desea.fuente