एक स्ट्रिंग को देखते हुए, मुझे $
के बाद फ़ील्ड की पहचान करने की आवश्यकता है जो { }
से घिरा हो या न हो:
$verb = verb
${verb}age = verb
$$
एक पलायन के रूप में कार्य करता है और मुझे इसका हिसाब देना होगा और साथ ही यह परिसीमन $
से पहले भी हो सकता है।
मेरे पास अब तक क्या है:
reg = r'\$([_a-zA-Z0-9]*)'
s = '$who likes $what'
re.findall(reg, s)
['who', 'what']
लेकिन मैं वैकल्पिक ब्रेसिंग के लिए अभिव्यक्ति तैयार नहीं कर सकता, मैंने कोशिश की:
reg = r'\$({?[_a-zA-Z0-9]*}?)'
लेकिन वह इस तरह के मूल्यों को उठाता है:
${who
$who}
वैकल्पिक ब्रेसिंग के लिए खाते में सक्षम होने के लिए उपयुक्त अभिव्यक्ति क्या होगी?
अपडेट करें:
जब पूर्ववर्ती $
की बात आती है, तो निम्नलिखित अमान्य तार होंगे:
$$verb = invalid
$${verb} = invalid
लेकिन ये मान्य होंगे:
$$$verb = $verb
$$${verb} = $verb
ऐसा इसलिए है क्योंकि एक $$
को बाद में एक $
से बदल दिया जाता है।
2 जवाब
यदि उद्घाटन {
को समापन }
के साथ मेल खाना चाहिए, तो आप एक विकल्प के साथ 2 कैप्चरिंग समूहों का उपयोग कर सकते हैं और फिर मान या तो समूह 1 या समूह 2 में होगा।
यदि $
से पहले कोई दूसरा $
नहीं होना चाहिए, तो आप सीधे बाईं ओर डॉलर चिह्न नहीं होने का दावा करते हुए एक नकारात्मक लुकबैक (?<!\$)\$
का उपयोग कर सकते हैं।
\$(?:{([_a-zA-Z0-9]+)}|([_a-zA-Z0-9]+))\b
या केवल मान प्राप्त करने के लिए, आप लुकअराउंड के साथ एक विकल्प का उपयोग कर सकते हैं
(?<=\$)[_a-zA-Z0-9]+\b|(?<=\${)[_a-zA-Z0-9]+(?=})
import re
regex = r"(?<=\$)[_a-zA-Z0-9]+\b|(?<=\${)[_a-zA-Z0-9]+(?=})"
test_str = ("$verb = verb\n"
"${verb}age = verb")
print(re.findall(regex, test_str))
उत्पादन
['verb', 'verb']
संपादित करें
अपडेट किए गए प्रश्न के लिए, उदाहरण के लिए कैप्चरिंग समूहों का उपयोग करके, आप या तो एक या 3 या अधिक डॉलर के संकेतों का मिलान कर सकते हैं, जो यह कहते हुए कि जो पहले है वह डॉलर का चिह्न नहीं है।
(?<!\$)(?:\$(?:\${2,})?)(?:{([_a-zA-Z0-9]+)}|([_a-zA-Z0-9]+))
आप मैचों का दूसरा सेट कुछ इस तरह से प्राप्त कर सकते हैं:
reg2 = '\$(?:{)([_a-zA-Z0-9]+)(?:})'
जो ताल्लुक को अनिवार्य बनाता है लेकिन कब्जा नहीं...
संबंधित सवाल
नए सवाल
python
पायथन एक बहु-प्रतिमान है, गतिशील रूप से टाइप किया हुआ, बहुउद्देशीय प्रोग्रामिंग भाषा है। यह एक साफ और एक समान वाक्यविन्यास सीखने, समझने और उपयोग करने के लिए त्वरित होने के लिए डिज़ाइन किया गया है। कृपया ध्यान दें कि अजगर 2 आधिकारिक तौर पर 01-01-2020 के समर्थन से बाहर है। फिर भी, संस्करण-विशिष्ट पायथन सवालों के लिए, [अजगर -२.०] या [अजगर -३.x] टैग जोड़ें। पायथन वेरिएंट (जैसे, ज्योथन, PyPy) या लाइब्रेरी (उदा।, पांडस और न्यूमपी) का उपयोग करते समय, कृपया इसे टैग में शामिल करें।