मुझे एक लॉगफाइल को पार्स करने की आवश्यकता है जिसमें 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*
मैं तो ठीक पेलोड खुद के लिए आते हैं जैसे (^ एक प्रत्येक टैग के बीच विभाजक है):
8=FIX.4.2^A9=61^A35=A...^A11=blahblah...
मैं इस (जैसे से 'ए' से विशिष्ट टैग को निकालने के लिए की जरूरत है 35 =, या 11 = से "blahblah"), और अन्य सभी चीजों को अनदेखा करें - मूल रूप से मुझे "35 = ए" से पहले कुछ भी अनदेखा करने की आवश्यकता है, और "11 = blahblah" के बाद कुछ भी, फिर उसके बाद कुछ भी अनदेखा करें।
मुझे वहां एक पुस्तकालय पता है जो प्रत्येक टैग को पार्स करने में सक्षम हो सकता है (http://source.kentyde.com/fixlib/overv iew), हालांकि, यदि संभव हो तो मैं रेगेक्स का उपयोग करके एक साधारण दृष्टिकोण की उम्मीद कर रहा था, क्योंकि मुझे वास्तव में केवल कुछ टैग की आवश्यकता है।
क्या मुझे आवश्यक टैग निकालने के लिए रेगेक्स में कोई अच्छा तरीका है?
चीयर्स, विक्टर
यह स्वीकार किए गए एक से बेहतर जवाब है। निश्चित रूप से आपको "लेन" फ़ील्ड के लिए खाते की आवश्यकता है। हर कोई हमेशा इनके बारे में भूल जाता है! इसके अलावा, FIX संदेशों में न्यूलाइन वर्ण (यानी टैग 58 में) हो सकते हैं, इसलिए आपको सुनिश्चित करने के लिए re.DOTALL का उपयोग करने की आवश्यकता है। – noahlz
जैसा कि [इस सवाल] में बताया गया है (http://stackoverflow.com/questions/31198950/parsing-fix-message-in-regex/31199578#31199575), इस समाधान में एक बग है - यह दो मैचों में विफल हो जाएगा सटा हुआ। – tripleee