2012-09-13 23 views
0

我有一塊數據,它基本上由管道分離的固定消息(背對背)組成。分析數據塊中的多個背靠背消息

我正在使用python,我能想到的唯一方法是找到8=FIX.4.2標記的索引(表示郵件的開始),回到上一個郵件的末尾,然後確定這樣的消息。

我想知道這是否可以通過任何其他方式實現(例如正則表達式)。我不知道如何在這裏應用正則表達式中的分組結構。

由於數據的一個例子,我在看:

8=FIX.4.2|9=122|35=D|49=hello|56=def|34=2|52=19700116-14:18:06.790|11=000007|55=DUMMY|54=#|38=1000|40=1|44=77|60=19700116-14:18:06.790|59=0|10=148|8=FIX.4.2|9=122|35=D|49=hello|56=def|34=2|52=19700116-14:18:06.790|11=000007|55=DUMMY54=#|38=1000|40=1|44=77|60=19700116-14:18:06.790|59=0|10=148| 

回答

2

您可以只使用8=FIX.4.2作爲參數傳遞給split()

+0

打我吧。如果你知道你總是有完整的消息,並且分隔符總是相同的,只需將其拆分,然後再次在管道上拆分,即可開始工作。 – Omnikrys

0
messages = your_input.split('8=FIX.4.2|') 
messages = [ m.split('|') for m in messages ] 
0

分割的問題是它從結果表達式中刪除了分隔符。 所以這是從我有數據分裂的回報。

['', '9=122|35=D|49=hello|56=def|34=2|52=19700116-14:18:06.790|11=000007|55=IYH|54=#|38=1000|40=1|44=77|60=19700116-14:18:06.790|59=0|10=148|', '9=155|35=D|49=hello|56=def|34=2|52=19700116-14:18:06.790|11=000007|55=IYH|54=#|38=1000|40=1|44=77|60=19700116-14:18:06.790|59=0|10=148|']

我想我在尋找方法將涉及使用分組及re.finditer的。

我將在完成後發佈表達式(因爲我以前從未使用過)。

0

expr = r'8=FIX\.4\.2.*?10=\d+\|' msglist = re.findall(expr,data)

這似乎在我希望的方式工作。