FIX protokol iletilerini içeren bir günlük dosyalarını ayrıştırmam gerekiyor.Regex'te FIX protokolünü ayrıştırma?
Her satırda başlık bilgileri (zaman damgası, günlüğe kaydetme düzeyi, bitiş noktası) ve ardından bir FIX yükü bulunur.
Başlık bilgisini adlandırılmış gruplara ayrıştırmak için düzenli ifadeler kullanıyorum. Ör:
<?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*
Sonra FIX yük kendisi gelip
mesela (^ A Her etiketi arasındaki ayırıcı ise): Bu (örneğin "A" dan gelen özel etiketleri ayıklamak gerekir
8=FIX.4.2^A9=61^A35=A...^A11=blahblah...
35 = veya "blahblah" dan 11 =) ve diğer tüm maddeleri görmezden gelmeliyiz - temelde "35 = A" ve daha sonra "11 = blahblah" a kadar olan herhangi bir şeyi görmezden gelmem gerek, sonra da bundan sonra hiçbir şeyi görmezden gelmeliyim.
Her bir etiketi ayrıştırabilecek bir kitaplık var (http://source.kentyde.com/fixlib/overv iew), ancak, mümkünse burada regex kullanarak basit bir yaklaşımı umuyordum, çünkü sadece birkaç etikete ihtiyacım var.
İhtiyaç duyduğum etiketleri ayıklamak için iyi bir yol var mı?
Alkış, Victor
Bu kabul edilenlerden daha iyi bir yanıttır. Kesinlikle "len" alanlarını hesaba katmanız gerekiyor. Herkes bunları her zaman unutur! Ayrıca, FIX mesajları yeni satır karakterleri içerebilir (yani, etiket 58'de), dolayısıyla emin olmak için re.DOTALL'ı kullanmanız gerekir. – noahlz
[Bu soru] 'da açıklandığı gibi (http://stackoverflow.com/questions/31198950/parsing-fix-message-in-regex/31199578#31199575), bu çözümde bir hata vardır - iki eşleşme olduğunda başarısız olur bitişik. – tripleee