में सभी तर्क मान लीजिए मैं ऐसे निम्नलिखित के रूप में एक स्ट्रिंग है मिलान करने के लिए। यह सिर्फ इस प्रारूप है। यदि यह आसान बनाता है, तो इसे फ़ंक्शन कॉल के रूप में न सोचें, केवल एक स्ट्रिंग।नियमित अभिव्यक्ति समारोह नाम और अजगर
मैं फ़ंक्शन से मेल खाने के लिए नियमित अभिव्यक्ति लिखना चाहता हूं और तर्कों के प्रत्येक को लिखना चाहता हूं। मैं इसे पायथन में लिख रहा हूं। इस के वांछित उत्पादन होता है:
{"function" : "func", "arg" : ["arg1", "arg2", ... , "argn"]}
संपादित करें: तर्क फ़ंक्शन कॉल हो सकता है, मैं आसानी से रिकर्सिवली एक बार मैं एक है कि काम करता है बनाने के एक ही नियमित अभिव्यक्ति के साथ उन्हें मैच के लिए कोशिश कर सकते हैं। इस से मेरा मतलब है कि मैं प्रत्येक तर्क के साथ समारोह पर भर्ती कर सकता हूं। लेकिन यह वास्तव में प्रासंगिक नहीं है। मैं नहीं एक दुभाषिया बनाने की कोशिश कर रहा हूं, केवल कुछ तर्कों को पहचानने के लिए।
import re
s = "func(arg1, arg2, arg3, arg4, argn)"
m = re.match(r"(?P<function>\w+)\s?\((?P<args>(?P<arg>\w+(,\s?)?)+)\)", s)
print m.groupdict()
और यहाँ आउटपुट है:
{'function': 'func', 'args': 'arg1, arg2, arg3, arg4, argn', 'arg': 'argn'}
समारोह ठीक से मेल खाता है, और इसलिए तर्क सेट करता है
यहाँ इस पर मेरे प्रयास है। हालांकि, मैं व्यक्तिगत तर्कों से मेल नहीं खा सकता। क्या यह मेरे regex, या पायथन नियमित अभिव्यक्ति मिलान की एक सीमा के साथ एक समस्या है?
EDIT2: मैं वाकिफ हूँ कि मैं अब निम्नलिखित कोड का उपयोग कर बहस विभाजित कर सकते हैं:
d["arg"] = d["args"].split(", ")
लेकिन अगर मैं नियमित अभिव्यक्ति के साथ पूरे काम कर सकता है मैं सोच रहा था। विशेष रूप से, मैं सोच रहा हूं कि क्यों "तर्क" केवल अंतिम तर्क से मेल खाता है।
EDIT3: मुझे लगता है कि मैं (1) यह समझने की उम्मीद कर रहा हूं कि क्यों पाइथन केवल हर बार अंतिम तर्क से मेल खाता है, और (2) क्या मैं पायथन में योजना-शैली पैटर्न-मिलान कर सकता हूं। या यदि पाइथन में स्कीम-स्टाइल पैटर्न मिलान के रूप में कुछ अंतर्ज्ञानी है। मैंने अस्थ मॉड्यूल को देखा, और इसका वाक्यविन्यास निषिद्ध जटिल है।
कुछ विशेष भाषा में इस समारोह कॉल है? आप एक ऐसी भाषा है जिसके लिए एक सही/पूर्ण पार्सर पहले से मौजूद है ... – Borealid
आप रेगुलर एक्सप्रेशन के साथ ऐसा नहीं कर सकते पार्स करने के लिए रेगुलर एक्सप्रेशन का उपयोग नहीं करना चाहिए (यह मानते हुए आप अलग-अलग तर्क है, जो खुद को फ़ंक्शन कॉल हो सकता है मिलान करना चाहते हैं)। आपको एक वास्तविक पार्सर चाहिए। http://pyparsing.wikispaces.com/ http://effbot.org/zone/simple-iterator-parser.htm – Wes
आप बाहर [pyparsing] जांच करना चाह सकते (: आप अपने खुद के लेखन पर जोर देते हैं, तो यह पढ़) यदि आप कुछ और जटिल करने की योजना बना रहे हैं। –