2012-09-13 2 views
0

필자는 본질적으로 파이프로 구분 된 고정 메시지로 구성되는 데이터 블록을 가지고 있습니다.데이터 블록에서 여러 개의 연속 된 메시지 구문 분석

저는 파이썬을 사용하고 있습니다. 제가 생각할 수있는 유일한 방법은 8=FIX.4.2 태그 (메시지의 시작을 나타냄)의 색인을 찾고, 이전 메시지의 끝으로 돌아가며 그렇게 메시지.

다른 방법 (예 : 정규식)을 얻을 수 있는지 궁금합니다. 나는 여기에 정규식에서 그룹화 구문을 적용하는 방법을 잘 모르겠습니다. 당신은 단지 split()의 인수로 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

:

는 데이터의 예를 들어 내가보고하고있다.

+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)

이 내가 기대 방식으로 작동하는 것 같다.