रूबी के नियमित अभिव्यक्तियों में परमाणु समूह (?>regexp)
नामक एक विशेषता है, here का वर्णन किया गया है, क्या पाइथन के re
मॉड्यूल में कोई समतुल्य है?क्या पाइथन नियमित अभिव्यक्ति रूबी के परमाणु समूह के बराबर है?
उत्तर
अजगर सीधे इस सुविधा का समर्थन नहीं करता है, लेकिन आप एक शून्य चौड़ाई अग्रदर्शी ज़ोर ((?=RE)
) है, जो के साथ मौजूदा बिंदु से मेल खाता का उपयोग करके इसे का अनुकरण कर सकते हैं वही अर्थशास्त्र जो आप चाहते हैं, लुकहेड के अंदर एक नामित समूह ((?P<name>RE)
) डालें, और उसके बाद एक नामित बैकरेफर ((?P=name)
) का उपयोग करके शून्य-चौड़ाई वाला दावा मिलान करने के लिए बिल्कुल सही मिलान करें। एक साथ संयुक्त, यह आपको एक अतिरिक्त मिलान समूह, और बहुत सारे वाक्यविन्यास बनाने की लागत पर, वही अर्थशास्त्र देता है।
उदाहरण के लिए, लिंक आपके द्वारा दी गई
/"(?>.*)"/.match('"Quote"') #=> nil
की रूबी उदाहरण देता है हम अनुकरण कर सकते हैं कि अजगर में जैसे:
re.search(r'"(?=(?P<tmp>.*))(?P=tmp)"', '"Quote"') # => None
हम दिखा सकते हैं कि मैं कुछ उपयोगी कर रहा हूँ और न केवल लाइन शोर को फेंकना, क्योंकि अगर हम इसे बदलते हैं तो आंतरिक समूह अंतिम "
नहीं खाता है, यह अभी भी मेल खाता है:
re.search(r'"(?=(?P<tmp>[A-Za-z]*))(?P=tmp)"', '"Quote"').groupdict()
# => {'tmp': 'Quote'}
तुम भी गुमनाम समूहों और संख्यात्मक backreferences उपयोग कर सकते हैं, लेकिन इस लाइन-शोर के बहुत पूरा हो जाता है:
re.search(r'"(?=(.*))\1"', '"Quote"') # => None
(पूर्ण प्रकटीकरण: मैं पर्ल के perlre
प्रलेखन, जिसके लिए प्रलेखन के तहत यह उल्लेख से इस चाल सीखा (?>...)
।)
सही अर्थशास्त्र के अलावा, इसमें उचित प्रदर्शन गुण भी हैं। हम बंदरगाह perlre
से बाहर एक उदाहरण हैं:
[[email protected]:~/tmp]$ python re.py
96.0800571442
7.41481781006e-05
कौन सा केवल ज्यादा नाटकीय हो जाता है के रूप में हम खोज स्ट्रिंग की लंबाई का विस्तार:
[[email protected]:~/tmp]$ cat re.py
import re
import timeit
re_1 = re.compile(r'''\(
(
[^()]+ # x+
|
\([^()]* \)
)+
\)
''', re.X)
re_2 = re.compile(r'''\(
(
(?=(?P<tmp>[^()]+))(?P=tmp) # Emulate (?> x+)
|
\([^()]* \)
)+
\)''', re.X)
print timeit.timeit("re_1.search('((()' + 'a' * 25)",
setup = "from __main__ import re_1",
number = 10)
print timeit.timeit("re_2.search('((()' + 'a' * 25)",
setup = "from __main__ import re_2",
number = 10)
हम एक नाटकीय सुधार को देखते हैं।
http://docs.python.org/2/library/re.html#regular-expression-syntax
(? पी < नाम> ...)
नियमित कोष्ठकों की तरह, लेकिन सबस्ट्रिंग समूह के अनुरूप प्रतीकात्मक समूह नाम के माध्यम से नियमित अभिव्यक्ति के बाकी के भीतर पहुंचा जा सकता है से नाम। समूह के नाम वैध पायथन पहचानकर्ता होना चाहिए, और प्रत्येक समूह का नाम नियमित अभिव्यक्ति के भीतर केवल एक बार परिभाषित किया जाना चाहिए। एक प्रतीकात्मक समूह भी एक क्रमांकित समूह है, जैसे समूह का नाम नहीं था। तो नीचे दिए गए उदाहरण में आईडी नामक समूह को भी क्रमांकित समूह के रूप में संदर्भित किया जा सकता है।
उदाहरण के लिए, यदि पैटर्न (? पी [ए-जेए-जेड _] \ डब्ल्यू *) है, तो समूह को संदर्भित किया जा सकता है मिलान वस्तुओं के तरीकों के लिए तर्कों में इसके नाम से, जैसे m.group ('id') या m.end ('id'), और नियमित रूप से अभिव्यक्ति में नाम से ((? पी = आईडी) का उपयोग करके) और प्रतिस्थापन पाठ .sub() को दिया गया है (\ g का उपयोग कर)।
(? पी = नाम)
Matches whatever text was matched by the earlier group named name.
this table के अनुसार, उत्तर नहीं है। एक RFE अजगर 3 में जोड़ने के लिए बनाया गया था, लेकिन नए regex
मॉड्यूल, का समर्थन करता है जो इसे के पक्ष में अस्वीकृत किया गया था:
>>> import regex
>>> regex.match('"(?>.*)"', '"Quote"')
>>> regex.match('"(.*)"', '"Quote"')
<_regex.Match object at 0x00C6F058>
नोट: regex
अजगर 2 के लिए भी उपलब्ध है
आपके द्वारा लिंक किया गया 'रेगेक्स' मॉड्यूल एक ही रेगेक्स मॉड्यूल है जिसे आपने लिंक किया है, जो कि आपके द्वारा लिंक किया गया है, Python 3.3 stdlib – jfs
@ J.F.Sebastian ओह, ठीक है! मैंने सोचा कि पाइथन 3 अभी भी 'पुनः' मॉड्यूल का उपयोग करता है, क्योंकि मैंने कभी भी पायथन 2 का उपयोग किया था, मुझे यकीन नहीं था, और माना जाता है कि यह उसी मॉड्यूल को संदर्भित करता है। (* संपादित करें: * एनवीएम ने देखा कि क्या गलत था: मैं [यह आरएफई] (http://bugs.python.org/issue433030) देख रहा था, जिसे मैंने उत्तर में वर्णित एक के डुप्लिकेट के रूप में बंद कर दिया था मैं इसे अपडेट करूंगा) – mgibsonbr
अब, आपने लिंक बदल दिया है, मेरी पिछली टिप्पणी समझ में नहीं आती है। रिकॉर्ड के लिए लिंक http://pypi.python.org/pypi/regex और http://bugs.python.org/issue2636 थे – jfs
यह प्रतीत होता है नहीं।
http://www.regular-expressions.info/atomic.html
परमाणु समूह JGsoft स्वाद, जावा, PCRE, .नेट, पर्ल और रूबी सहित सबसे आधुनिक नियमित अभिव्यक्ति जायके, द्वारा समर्थित है।
आप गैर पर कब्जा समूहों, (?:RE)
का उपयोग करके उनमें से गैर कैप्चरिंग सत्ता का अनुकरण कर सकते हैं, लेकिन अगर मैं यह सही पढ़ रहा हूँ, कि अभी भी आप अनुकूलन लाभ नहीं देंगे।
- 1. क्या रूबी प्रतीकों के बराबर पाइथन है?
- 2. रूबी पाइथन के "डीआईआर" के बराबर है?
- 3. क्यों नियमित अभिव्यक्ति के "गैर-कैप्चरिंग" समूह
- 4. पाइथन सेटैटर के बराबर रूबी()
- 5. पाइथन नियमित अभिव्यक्ति
- 6. रूबी नियमित अभिव्यक्ति
- 7. पीएचपी नियमित अभिव्यक्ति - एक समूह
- 8. एकाधिक अभिव्यक्तियों के साथ नियमित अभिव्यक्ति समूह कैप्चर
- 9. नियमित अभिव्यक्ति - रूबी बनाम पर्ल
- 10. रुबी के पाइथन के मल्टीप्रोसेसिंग मॉड्यूल के बराबर क्या है?
- 11. पाइथन स्ट्र के बराबर रूबी [3:]
- 12. रूबी रूबी के बराबर है?
- 13. नियमित अभिव्यक्ति नामित समूह: अच्छा या बुरा?
- 14. जावास्क्रिप्ट नियमित अभिव्यक्ति अपवाद (अमान्य समूह)
- 15. प्लाई लेक्समैच नियमित अभिव्यक्ति में सामान्य समूह
- 16. नियमित अभिव्यक्ति कैप्चर समूह को बढ़ावा दें
- 17. नियमित अभिव्यक्ति में वैकल्पिक ब्लॉक के साथ समूह संख्या
- 18. नियमित अभिव्यक्ति, "बस समूह, कैप्चर न करें",
- 19. नियमित अभिव्यक्ति मिलान समूह के कम से कम n
- 20. पाइथन नियमित अभिव्यक्ति में "?:" का क्या अर्थ है?
- 21. पाइथन setup.py के रूबी समकक्ष क्या है?
- 22. नियमित अभिव्यक्ति
- 23. शब्दकोष के लिए नियमित अभिव्यक्ति
- 24. नियमित अभिव्यक्ति के विपरीत
- 25. उपसर्ग नियमित अभिव्यक्ति क्या है?
- 26. नियमित अभिव्यक्ति में '?: `का अर्थ क्या है
- 27. PHP $ _SERVER के बराबर पाइथन क्या है?
- 28. क्या रूबी/रेल के बराबर ++ है?
- 29. क्या php के पास पाइथन के वर्चुअलनेव या रूबी के सैंडबॉक्स के बराबर है?
- 30. पाइथन के आउटपुट के रूबी समकक्ष क्या है [: - 1]?
नामांकित मैचों परमाणु समूह के समान नहीं हैं। –
आह। क्षमा करें, दस्तावेज़ पृष्ठ को गलत पढ़ें। नहीं, मुझे विश्वास नहीं है कि मैंने कभी उस पायथन में सुना है। –