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|
4

4 回答 4

2

您可以将8=FIX.4.2其用作split().

于 2012-09-13T14:53:43.717 回答
0
messages = your_input.split('8=FIX.4.2|')
messages = [ m.split('|') for m in messages ]
于 2012-09-13T14:55:24.633 回答
0

split 的问题是它从结果表达式中删除了分隔符。所以这是对我拥有的数据进行拆分的回报。

['', '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。

完成后我会发布表达式(因为我以前从未使用过它)。

于 2012-09-13T15:14:48.480 回答
0

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

这似乎以我希望的方式工作。

于 2012-09-14T14:21:21.750 回答