मेरे पास निम्न कोड है:
s = '''alt="Thunder Force"/>ehkjehkljhiflealt="Godzilla vs. Kong"/>'''
for i in s:
start = s.find('alt="') + len('alt="')
end = s.find('"/>')
substring = s[start:end]
print(substring)
लेकिन यह केवल "थंडर फोर्स" को कई बार प्रिंट करता है। मैं चाहता हूं कि यह "थंडर फोर्स" और "गॉडजिला बनाम कोंग" ढूंढे और उन दोनों को एक-एक बार प्रिंट करें। कैसे?
4 जवाब
आप रेगेक्स का उपयोग कर सकते हैं
import re
s = '''alt="Thunder Force"/>ehkjehkljhiflealt="Godzilla vs. Kong"/>'''
x = re.findall(r'alt="(.*?)"/>', s)
print(x)
उत्पादन
['Thunder Force', 'Godzilla vs. Kong']
आप किसी से मेल खाने के लिए नकारात्मक वर्ण वर्ग [^"]+
का भी उपयोग कर सकते हैं "
को छोड़कर चार और अगर आप कम से कम एक वर्ण से मेल खाना चाहते हैं तो इसे 1+ बार दोहराएं।
अगर एक खाली मैच भी ठीक है, तो आप +
के बजाय *
का उपयोग कर सकते हैं।
import re
s = '''alt="Thunder Force"/>ehkjehkljhiflealt="Godzilla vs. Kong"/>'''
x = re.findall(r'alt="([^"]+)"/>', s)
print(x)
उत्पादन
['Thunder Force', 'Godzilla vs. Kong']
यहां एक गैर-रेगेक्स समाधान है जो मुझे लगता है कि आप अपने पोस्ट किए गए प्रयास से हासिल करने की कोशिश कर रहे थे:
start = 0
while True:
start = s.find('alt="', start)
if start == -1:
break
start += len('alt="')
end = s.find('"/>', start)
if end == -1:
break
substring = s[start:end]
start = end
print(substring)
regex
और re.findall()
का उपयोग करें
s = '''alt="Thunder Force"/>ehkjehkljhiflealt="Godzilla vs. Kong"/>'''
print(re.findall(r'(?<=alt\=").*?(?="/>)', s))
#['Thunder Force', 'Godzilla vs. Kong']
संबंधित सवाल
नए सवाल
python
पायथन एक बहु-प्रतिमान है, गतिशील रूप से टाइप किया हुआ, बहुउद्देशीय प्रोग्रामिंग भाषा है। यह एक साफ और एक समान वाक्यविन्यास सीखने, समझने और उपयोग करने के लिए त्वरित होने के लिए डिज़ाइन किया गया है। कृपया ध्यान दें कि अजगर 2 आधिकारिक तौर पर 01-01-2020 के समर्थन से बाहर है। फिर भी, संस्करण-विशिष्ट पायथन सवालों के लिए, [अजगर -२.०] या [अजगर -३.x] टैग जोड़ें। पायथन वेरिएंट (जैसे, ज्योथन, PyPy) या लाइब्रेरी (उदा।, पांडस और न्यूमपी) का उपयोग करते समय, कृपया इसे टैग में शामिल करें।