नाम दिया गया नियमित अभिव्यक्ति समूह "(?? P <group_name> regexp)": "P" किसके लिए खड़ा है?


178

पायथन में, (?P<group_name>…) वाक्यविन्यास किसी को उसके नाम के माध्यम से मिलान स्ट्रिंग का उल्लेख करने की अनुमति देता है:

>>> import re
>>> match = re.search('(?P<name>.*) (?P<phone>.*)', 'John 123456')
>>> match.group('name')
'John'

"पी" के लिए क्या खड़ा है? मुझे आधिकारिक दस्तावेज में कोई संकेत नहीं मिला ।

मुझे इस बारे में विचार प्राप्त करना अच्छा लगेगा कि कैसे मेरे छात्रों को इस वाक्यविन्यास को याद रखने में मदद मिलेगी। यह जानना कि "P" किसके लिए खड़ा है (या उसके लिए खड़ा हो सकता है) उपयोगी होगा।


8
Pके लिए खड़ा है Placeholder
केव

1
@kev: ऐसा लगता है कि एक जवाब होना चाहिए?
Ninjagecko

3
चूंकि अनुमान उपयुक्त हैं, इसलिए मैं अनुमान लगाता हूं कि केन थॉम्पसन हिप्पी सहानुभूति रखने वाला और "पैचौली" के लिए "पी" स्टैंड है।
अपरोनस्टरलिंग

2
यह प्रश्न "समूह" के तहत स्टैक ओवरफ्लो रेगुलर एक्सप्रेशन एफएक्यू में जोड़ा गया है ।
aliteralmind

6
वैसे, यदि आप match.groups(a s) के साथ उपयोग करते हैं, तो आप चुपचाप सभी समूहों का एक समूह प्राप्त करेंगे -_- groups('name')=> ('John', '123456')जब आप वास्तव में चाहते थे तो group('name')=>> 'John' मुझे आशा है कि यह किसी को कुछ समय बचाता है।
szmoore

जवाबों:


262

जब से हम सभी अनुमान लगा रहे हैं, मैं भी अपना दे सकता हूं: मैंने हमेशा सोचा है कि यह पायथन के लिए खड़ा था। यह बहुत बेवकूफ लग सकता है - क्या, पी पायथन के लिए ?! - लेकिन मेरे बचाव में, मैंने जोर से इस धागे को याद किया [जोर मेरा]:

विषय: दावा (? पी ...) रेगेक्स सिंटैक्स एक्सटेंशन

से: गुइडो वैन रोसुम (गुई ... @ CNRI.Reston.Va.US)

दिनांक: दिसम्बर १०, १ ९९: ३:३६: १ ९

मेरे पास पर्ल डेवलपर्स (जो पर्ल भाषा विकसित करते हैं) के लिए एक असामान्य अनुरोध है। मुझे आशा है कि यह (perl5-porters) सही सूची है। मैं Python string-sig को cc'ing कर रहा हूं क्योंकि यह उन अधिकांश कामों का मूल है जिनकी मैं यहां चर्चा कर रहा हूं।

आप शायद अजगर के बारे में जानते हैं। मैं अजगर का निर्माता हूँ; मैं इस वर्ष के अंत तक एक अगला "प्रमुख" संस्करण पायथन 1.5 जारी करने की योजना बना रहा हूं। मुझे आशा है कि आने वाले वर्षों में अजगर और पर्ल सह-अस्तित्व में रह सकते हैं; क्रॉस-परागण दोनों भाषाओं के लिए अच्छा हो सकता है। (मेरा मानना ​​है कि लैरी ने पायथन पर एक अच्छी नज़र रखी थी, जब उन्होंने पर्ल 5 में ऑब्जेक्ट जोड़े थे; ओ'रिली ने उनकी भाषाओं के बारे में प्रकाशित किया था।)

जैसा कि आप जानते हैं, पायथन 1.5 एक नया नियमित अभिव्यक्ति मॉड्यूल जोड़ता है जो पर्ल के सिंटैक्स से अधिक निकटता से मेल खाता है। हमने पायथन के सिंटैक्स के भीतर संभव के रूप में पर्ल सिंटैक्स के करीब होने की कोशिश की है। हालाँकि, रेगेक्स सिंटैक्स में कुछ पायथन-विशिष्ट एक्सटेंशन हैं, जो सभी के साथ शुरू होते हैं (? पी। वर्तमान में उनमें से दो हैं:

(?P<foo>...)नियमित समूहन कोष्ठक के समान, लेकिन
समूह द्वारा मिलान किया गया पाठ मैच के प्रदर्शन के बाद सुलभ है, प्रतीकात्मक समूह नाम "फू" के माध्यम से।

(?P=foo)उसी स्ट्रिंग से मेल खाता है जो "फू" नाम के समूह द्वारा मेल खाता है। समूह को संदर्भित करने के अलावा, \ 1, \ 2, आदि के बराबर
से किया संख्या ।

मुझे आशा है कि यह पायथन-विशिष्ट एक्सटेंशन पर्ल रेगेक्स सिंटैक्स के किसी भी भविष्य के पर्ल एक्सटेंशन के साथ संघर्ष नहीं करेगा। यदि आपके पास उपयोग करने की योजना है (? P, तो कृपया हमें जल्द से जल्द बताएं ताकि हम संघर्ष को हल कर सकें। अन्यथा, यह अच्छा होगा यदि (? P वाक्यविन्यास को स्थायी रूप से पायथन-विशिष्ट सिंटैक्स एक्सटेंशन के लिए आरक्षित किया जा सके। (Is एक्सटेंशन की किसी प्रकार की रजिस्ट्री है?)

जिसके लिए लैरी वॉल ने उत्तर दिया:

[...] अब तक कोई रजिस्ट्री नहीं है - आपका perl5-porters के बाहर से पहला अनुरोध है, इसलिए यह एक बहुत कम बैंडविड्थ गतिविधि है। (क्षमा करें, यह पिछले हफ्ते भी कम था - मैं इंटरनेट वर्ल्ड में न्यूयॉर्क में बंद था।)

वैसे भी, जहाँ तक मेरा सवाल है, आप निश्चित रूप से मेरे आशीर्वाद से 'पी' पा सकते हैं। (स्पष्ट रूप से पर्ल को इस बिंदु पर 'P' की आवश्यकता नहीं है। :-) [...]

इसलिए मुझे नहीं पता कि पी की मूल पसंद किस पैटर्न से प्रेरित थी? प्लेसहोल्डर? पेंगुइन? - लेकिन आप समझ सकते हैं कि मैंने हमेशा इसे पायथन के साथ क्यों जोड़ा है। जो इस बात पर विचार कर रहा है कि (१) मुझे नियमित अभिव्यक्ति पसंद नहीं है और जहाँ भी संभव हो उनसे बचें, और (२) यह धागा पंद्रह साल पहले हुआ था, यह एक तरह का अजीब है।


4
"पायथन-विशिष्ट एक्सटेंशन" शायद?
jmort253

50
वाह, आपको ऐतिहासिक डेटा के कुछ अच्छे और प्रासंगिक टुकड़े मिल गए, यहाँ! गुइडो के पोस्ट की मेरी व्याख्या यह है कि "पी" का अर्थ "पायथन-विशिष्ट एक्सटेंशन" है।
एरिक ओ लेबिगॉट

1
हां, यह मेरे लिए निश्चित है। इसलिए यह विडंबना है कि पर्ल और पीसीआरई ने शुरू में वाक्य रचना की नकल की, सिर्फ इसलिए कि पायथन कैप्टनस नाम के समर्थन का पहला स्वाद था। लेकिन वे (?<group_name>…)सिंटैक्स का भी समर्थन करते हैं, जो सबसे लोकप्रिय लगता है - यहां तक ​​कि जावा भी अब इसका समर्थन करता है।
एलन मूर

3
+1 यह सबसे अच्छा अजीब जवाब है जो अच्छी तरह से बचाव है :)। सबसे पहले, मैंने सोचा कि यह बहुत बेवकूफ है। लेकिन अंत में, मैं पूरी तरह से सहमत था।
सुमुदु

4
मुझे यह पसंद है कि जब पायल शामिल होती है, तब भी पायथन का निर्माता विचित्र आर्कन सिंटैक्स का उपयोग करता है, और पर्ल समुदाय इसके साथ पूरी तरह से ठीक है। यदि आपने पायथन में पर्ल-विशिष्ट एक्सटेंशन / सिंटैक्स को जोड़ने की कोशिश की, तो सड़कों पर खून होगा।
कीथ रिप्ले

20

पैटर्न! समूह regex में बाद में उपयोग के लिए (उप) पैटर्न का नाम देता है। इस तरह के समूहों का उपयोग कैसे किया जाता है, इस बारे में जानकारी के लिए दस्तावेज देखें ।


3
+1: यह एक अच्छा mnemonic डिवाइस है: (?P<name>…)"पैटर्न name" है। सब कुछ एक पैटर्न है, हालांकि, एक regexp में, इसलिए यह (?P<…>…)पैटर्न के रूप में केवल लेबल समूहों के लिए अजीब है । हालांकि, यह मेरे छात्रों के लिए होगा। :)
एरिक ओ लेबिगॉट

1
@ ईओएल छात्रों को झूठी बातें नहीं सिखाता। जब आप सोचते हैं कि आप सटीकता के लिए पहुँचते हैं, तो उन्हें मुश्किल से निकाल दिया जाता है। उदाहरण के लिए। कुछ, मेरे लिए, कई साल लगते हैं 5। विरोधाभासी रूप से, यह आकस्मिक रूप से बोलने के लिए प्रोत्साहित किया जाता है, बस हमेशा इसके बारे में बहुत स्पष्ट और स्पष्ट होना चाहिए - जैसे। अपनी पिछली टिप्पणी अपने छात्रों को पूरी लंबाई में बताएं (शायद बहुत अंतिम वाक्य को संशोधित करते हुए;)।
n611x007 7

5

पायथन एक्सटेंशन। पायथन डोकोस से:

पर्ल डेवलपर्स द्वारा चुना गया समाधान एक्सटेंशन सिंटैक्स के रूप में (...) का उपयोग करना था। ? एक कोष्ठक के तुरंत बाद एक वाक्यविन्यास त्रुटि थी क्योंकि? दोहराने के लिए कुछ भी नहीं होगा, इसलिए यह किसी भी संगतता समस्याओं का परिचय नहीं दिया। अक्षर तुरंत बाद? संकेत मिलता है कि किस विस्तार का उपयोग किया जा रहा है, इसलिए (? = foo) एक चीज है (एक सकारात्मक रूपांतर परख) और (?: फू) कुछ और है (एक गैर-कैप्चरिंग समूह जिसमें उपप्रकारक फू है)।

पायथन पर्ल के कई एक्सटेंशन का समर्थन करता है और पर्ल के एक्सटेंशन सिंटैक्स में एक एक्सटेंशन सिंटैक्स जोड़ता है। यदि प्रश्न चिह्न के बाद पहला वर्ण P है, तो आप जानते हैं कि यह एक विस्तार है जो पायथन के लिए विशिष्ट है

https://docs.python.org/3/howto/regex.html


अच्छी तरह से देखा गया! यह डीएसएम की भावना की पुष्टि करता है।
एरिक ओ लेबिगॉट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.