मेरे पास निम्न कोड है:

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)

लेकिन यह केवल "थंडर फोर्स" को कई बार प्रिंट करता है। मैं चाहता हूं कि यह "थंडर फोर्स" और "गॉडजिला बनाम कोंग" ढूंढे और उन दोनों को एक-एक बार प्रिंट करें। कैसे?

1
dark_light 22 अप्रैल 2021, 01:52

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
sahasrara62 22 अप्रैल 2021, 01:59

आप किसी से मेल खाने के लिए नकारात्मक वर्ण वर्ग [^"]+ का भी उपयोग कर सकते हैं " को छोड़कर चार और अगर आप कम से कम एक वर्ण से मेल खाना चाहते हैं तो इसे 1+ बार दोहराएं।

अगर एक खाली मैच भी ठीक है, तो आप + के बजाय * का उपयोग कर सकते हैं।

import re
s = '''alt="Thunder Force"/>ehkjehkljhiflealt="Godzilla vs. Kong"/>'''
x = re.findall(r'alt="([^"]+)"/>', s)
print(x)

उत्पादन

['Thunder Force', 'Godzilla vs. Kong']
0
The fourth bird 22 अप्रैल 2021, 02:21

यहां एक गैर-रेगेक्स समाधान है जो मुझे लगता है कि आप अपने पोस्ट किए गए प्रयास से हासिल करने की कोशिश कर रहे थे:

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)
0
Woodford 22 अप्रैल 2021, 02:14

regex और re.findall() का उपयोग करें

s = '''alt="Thunder Force"/>ehkjehkljhiflealt="Godzilla vs. Kong"/>'''

print(re.findall(r'(?<=alt\=").*?(?="/>)', s))
#['Thunder Force', 'Godzilla vs. Kong']
0
PacketLoss 22 अप्रैल 2021, 01:59