我需要解析包含FIX協議消息的日誌文件。解析正則表達式中的FIX協議?
每一行都包含頭信息(時間戳,日誌記錄級別,端點),後跟一個FIX有效載荷。
我用正則表達式來將頭信息解析成命名組。例如:
<?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*
然後我來到了FIX有效載荷本身(^ A是每個標籤之間的分隔符),例如:
8=FIX.4.2^A9=61^A35=A...^A11=blahblah...
我需要從這個(如「A」從提取特定標籤35 =或從11 =開始的「blahblah」),並忽略所有其他的東西 - 基本上我需要在「35 = A」之前忽略任何內容,以及在「11 = blahblah」之後的任何內容,然後忽略任何內容等。
我知道那裏有一個庫可能能夠解析每一個標籤(http://source.kentyde.com/fixlib/overv但是,如果可能的話,我希望在這裏使用正則表達式,因爲我真的只需要幾個標籤。
有沒有在正則表達式中提取我需要的標籤的好方法?
乾杯, 維克多
這是比接受的更好的答案。當然,你需要考慮「len」字段。每個人都會忘記這些!另外,FIX消息可以包含換行符(即在標籤58中),所以你需要使用re.DOTALL來確保。 – noahlz
正如在[這個問題](http://stackoverflow.com/questions/31198950/parsing-fix-message-in-regex/31199578#31199575)解釋,這種解決方案有一個錯誤 - 它會失敗,當兩場比賽是鄰。 – tripleee