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

分割の問題は、結果の式から区切り文字が削除されることです。これは、私が持っているデータの分割からの戻り値です。

['', '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
messages = your_input.split('8=FIX.4.2|')
messages = [ m.split('|') for m in messages ]
于 2012-09-13T14:55:24.633 に答える
0

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

これは私が望んでいた方法で動作するようです。

于 2012-09-14T14:21:21.750 に答える