मैं आपकी मदद पूछना चाहता हूं।पायथन: डेटा पकड़ने के लिए regex
मैं डेटा की एक बड़ी टुकड़ा है, जो इस तरह दिखता है:
a
b : c 901
d : e sda
v
w : x ads
any
abc : def 12132
ghi : jkl dasf
mno : pqr fas
stu : vwx utu
विवरण: फ़ाइल एकल शब्द वाले एक लाइन के साथ शुरू होता है (यह सफेद स्थान के साथ शुरू कर सकते हैं और व्हाइटस्पेस शब्द के बाद भी हो सकता है), फिर कोलन द्वारा अलग किए गए गुणों की रेखा का अनुसरण करता है (व्हाइटस्पेस भी हो सकता है), फिर एक शब्द के साथ गुणों या रेखा की फिर से पंक्ति। मैं सही regex इस तरह के रूप में इसे पकड़ने के लिए नहीं बना सकते हैं:
{
"a": [["b": "c 901"], ["d", "e sda"]],
"v": [["w", "x ads"]],
"any": ["abc", "def 12132"], ["ghi", "jkl dasf"],
# etc.
}
यहाँ मैं क्या कोशिश की है है:
regex = str()
regex += "^(?:(?:\\s*)(.*?)(?:\\s*))$",
regex += "(?:(?:^(?:\\s*)(.*?)(?:\\s*):(?:\\s*)(.*?)(?:\\s*))$)*$"
pattern = re.compile(regex, re.S | re.M)
हालांकि, यह मैं क्या जरूरत नहीं मिल रहा है। क्या तुम मेरी मदद कर सकते हो? मुझे पता है कि मैं लाइन-बाय-लाइन इटरेटर का उपयोग करके रेगेक्स के बिना फ़ाइल को संसाधित कर सकता हूं और ":" प्रतीक की जांच कर सकता हूं, लेकिन फ़ाइल इस तरह से संसाधित करने के लिए बहुत बड़ी है (यदि आप जानते हैं कि बिना किसी रेगेक्स के इसे कैसे संसाधित करना है, तो यह भी होगा सही जवाब, लेकिन सबसे पहले जो दिमाग में आता है वह बहुत धीमा है)।
अग्रिम धन्यवाद!
पीएस फ़ाइल के विहित प्रपत्र में इस तरह दिखता है:
a
b : c 901
d : e sda
हर खंड एक शब्द के साथ शुरू होता है, तो गुण लाइन (दो व्हाइटस्पेस के बाद) का पालन करें, वहाँ विशेषताओं के साथ अलग होती है (":"), तो agane विशेषताओं लाइन या एक शब्द के साथ लाइन। अन्य सफेद जगह निषिद्ध हैं। शायद यह आसान हो जाएगा।
+1 सुपर स्पष्टता; अच्छी तरह से तैयार सवाल। – Yavar