आप सभी "निश्चित" समूहों को कैप्चर करते हुए और info
के लिए जो कुछ भी बना रहे हैं, उसका नियमित अभिव्यक्ति का उपयोग कर सकते हैं। यह भी काम करना चाहिए यदि info
भाग में ,
या =
वर्ण शामिल हैं। यहां कुछ त्वरित उदाहरण दिया गया है (पायथन का उपयोग करके, लेकिन यह कोई समस्या नहीं होनी चाहिए ...)।
>>> p = r"(type=[A-Z]+), (languageCode=[-A-Z]+), (url=[^,]+), (ref=\d), (info=.+?), (deactivated=(?:true|false))"
>>> s = "type=INFO, languageCode=EN-GB, url=http://www.stackoverflow.com, ref=1, info=Text, that may contain all kind of chars, even deactivated=true., deactivated=false"
>>> re.search(p, s).groups()
('type=INFO',
'languageCode=EN-GB',
'url=http://www.stackoverflow.com',
'ref=1',
'info=Text, that may contain all kind of chars, even deactivated=true.',
'deactivated=false')
उन तत्वों के किसी भी वैकल्पिक हैं, तो आप उन समूहों के बाद एक ?
रखा, और अल्पविराम वैकल्पिक कर सकते हैं। अगर आदेश अलग हो सकता है, तो यह अधिक जटिल है। इस मामले में, एक बार में सब कुछ कैप्चर करने के लिए एक RegEx का उपयोग करने के बजाय, व्यक्तिगत गुणों को कैप्चर करने के लिए कई RegExes का उपयोग करें और फिर अगली विशेषता से मेल खाने से पहले स्ट्रिंग में ''
के साथ प्रतिस्थापित करें) को हटा दें। अंत में, info
से मेल खाते हैं।
आगे विचार पर, यह देखते हुए कि उन विशेषताओं किसी भी क्रम अभी सब कुछ किसी एक कीवर्ड से अगले करने के लिए फैले, इसके वास्तविक सामग्री की परवाह किए बिना, बहुत Pshemo के समाधान के लिए इसी तरह कब्जा करने के लिए, इसे और अधिक होनहार हो सकता है हो सकता है:
keys = "type|languageCode|url|ref|info|deactivated"
p = r"({0})=(.+?)(?=\, (?:{0})=|$)".format(keys)
matches = re.findall(p, s)
लेकिन यह भी कुछ अस्पष्ट मामलों में विफल हो सकता है, उदाहरण के लिए यदि info
विशेषता में कॉमा सहित ', ref=foo'
जैसे कुछ शामिल हैं। हालांकि, उन अस्पष्टताओं के आसपास कोई रास्ता नहीं लगता है। यदि आपके पास info=in this string, ref=1, and in another, ref=2, ref=1
जैसी स्ट्रिंग थी, तो इसमें ref
विशेषता, या तीन, या कोई भी नहीं है?
इस तत्वों का क्रम तय है? – Pshemo
'=' के लिए खोज करने के बारे में और उसके बाद एक शब्द को फ़ील्ड नाम के रूप में चुनें। '=' के बाद सबकुछ अगले फ़ील्ड नाम तक मूल्य है। यह मानता है कि मान में '=' नहीं हो सकता है - यदि यह हो सकता है, तो आपके पास जाने के लिए बहुत कुछ नहीं है। – xxbbcc
यदि सभी _other_ विशेषताओं में कुछ हद तक अनुमानित प्रारूप है, तो आप उन्हें हटा सकते हैं और 'जानकारी' के लिए जो कुछ भी बचे हैं ... –