Necesito analizar un archivo de registro que contenga mensajes de protocolo FIX.Analizando el protocolo FIX en expresiones regulares?
Cada línea contiene información de encabezado (marca de tiempo, nivel de registro, punto final), seguido de una carga FIX.
He usado regex para analizar la información del encabezado en grupos nombrados. Ej:
<?P<datetime>\d{2}/\d{2}/\d{2} \d{2}:\d{2}:\d{2}.\d{6}) (?<process_id>\d{4}/\d{1,2})\s*(?P<logging_level>\w*)\s*(?P<endpoint>\w*)\s*
entonces llego a la propia carga útil FIX (^ A es el separador entre cada etiqueta), por ejemplo:
8=FIX.4.2^A9=61^A35=A...^A11=blahblah...
necesito para extraer etiquetas específicas de este (por ejemplo, "A" de 35 =, o "blahblah" de 11 =), e ignorar todas las otras cosas - básicamente necesito ignorar cualquier cosa antes de "35 = A", y cualquier cosa después de hasta "11 = blahblah", luego ignorar cualquier cosa después de eso, etc.
Sé que hay una biblioteca que podría analizar todas y cada una de las etiquetas (http://source.kentyde.com/fixlib/overv iew), sin embargo, esperaba un enfoque simple usando regex aquí si es posible, ya que realmente solo necesito un par de etiquetas.
¿Hay una buena forma en la expresión regular para extraer las etiquetas que necesito?
Saludos, Victor
Esta es una mejor respuesta que la aceptada. Debe tener en cuenta los campos "len", seguro. Todos se olvidan de esto! Además, los mensajes FIX pueden contener caracteres de nueva línea (es decir, en la etiqueta 58), por lo que debe usar re.DOTALL para estar seguro. – noahlz
Como se explica en [esta pregunta] (http://stackoverflow.com/questions/31198950/parsing-fix-message-in-regex/31199578#31199575), esta solución tiene un error: fallará cuando se realicen dos coincidencias adyacente. – tripleee