मेरे पास है :
s='"Tag":"Football","name":"Mickael A","Played":"10times","Tag":"Basket","name":"Bruce B","Played":"8times","Tag":"Football","name":"John R","Played":"6times",'
मैं फुटबॉल और बास्केट के आधार पर विभाजित करना चाहता हूं यानी:
['','"Mickael A","Played":"10times"',
'"Bruce B","Played":"8times",',
'"John R","Played":"6times",']
मैंने कोशिश की :
s.strip().split(r'"Tag":("Football"|"Basket"),"name":')
लेकिन यह काम नहीं कर रहा है।
5 जवाब
आपको re
लाइब्रेरी का उपयोग करने और फ़ुटबॉल और बास्केटबॉल को गैर कैप्चरिंग समूह बनाने की आवश्यकता है ताकि वे परिणाम में प्रकट न हों:
import re
re.split(r'"Tag":(?:"Football"|"Basket"),"name":', s)
परिणाम होगा:
['', '"Mickael A","Played":"10times",', '"Bruce B","Played":"8times",', '"John R","Played":"6times",']
बेहतर दृष्टिकोण इस स्ट्रिंग को संरचित करेगा और मैं नाम खेल रहा हूं और खेल (जो दोहराया जाता है वह एक व्यक्ति से संबंधित होता है)। तानाशाही की इस सूची के बाद आप आसानी से डेटा में हेरफेर कर सकते हैं
s='"Tag":"Football","name":"Mickael A","Played":"10times","Tag":"Basket","name":"Bruce B","Played":"8times","Tag":"Football","name":"John R","Played":"6times",'
l=[]
def fun(s):
return str('{')+s+str('}')
import ast
k = s.strip().split(',')
for i in range(0,len(k),3):
dic={}
if len(k[i].split(':'))==2:
dic['Tag']=ast.literal_eval(fun(k[i]))['Tag']
dic['name']=ast.literal_eval(fun(k[i+1]))['name']
dic['Played']=ast.literal_eval(fun(k[i+2]))['Played']
l.append(dic)
print(l)
'''
output
[{'Tag': 'Football', 'name': 'Mickael A', 'Played': '10times'}, {'Tag': 'Basket', 'name': 'Bruce B', 'Played': '8times'}, {'Tag': 'Football', 'name': 'John R', 'Played': '6times'}]
'''
re
लाइब्रेरी वही करती है जो आपको चाहिए।
import re
s='"Tag":"Football","name":"Mickael A","Played":"10times","Tag":"Basket","name":"Bruce B","Played":"8times","Tag":"Football","name":"John R","Played":"6times",'
re.split('Football|Basket', s)
यह लौटता है
>>> ['"Tag":"',
'","name":"Mickael A","Played":"10times","Tag":"',
'","name":"Bruce B","Played":"8times","Tag":"',
'","name":"John R","Played":"6times",']
आप निम्न रेगेक्स का उपयोग re.split
के साथ कर सकते हैं:
"Tag":"[^"]+","name":
"Tag":"
अक्षरशः मेल खाता है[^"]+
एक या अधिक वर्णों से मेल खाता है जो"
नहीं हैं यानी अगले"
तक मेल खाते हैं","name":
अक्षरशः मेल खाता है
आप [^"]+
के बजाय गैर-लालची पैटर्न .*?"
का भी उपयोग कर सकते हैं:
"Tag":".*?","name":'
उदाहरण:
In [486]: s = '"Tag":"Football","name":"Mickael A","Played":"10times","Tag":"Basket","name":"Bruce B","Played":"8times","Tag":"Football","name":"John R","Played":"6times",'
In [487]: re.split(r'"Tag":"[^"]+","name":', s)
Out[487]:
['',
'"Mickael A","Played":"10times",',
'"Bruce B","Played":"8times",',
'"John R","Played":"6times",']
In [488]: re.split(r'"Tag":".*?","name":', s)
Out[488]:
['',
'"Mickael A","Played":"10times",',
'"Bruce B","Played":"8times",',
'"John R","Played":"6times",']
अपनी स्ट्रिंग का विश्लेषण करते हुए, ऐसा लगता है कि आपको इसकी आवश्यकता है:
re.findall(r'"name":(.*?),(?:"Tag"|$)', s)
जहां, s
आपकी स्ट्रिंग है। यह किसी चीज़ (.*?
) के बाद "name":
और ,"Tag"
या ,<end>
से पहले की सभी घटनाओं का पता लगाता है
पूर्ण कोड:
import re
s = '"Tag":"Football","name":"Mickael A","Played":"10times","Tag":"Basket","name":"Bruce B","Played":"8times","Tag":"Football","name":"John R","Played":"6times",'
print(re.findall(r'"name":(.*?),(?:"Tag"|$)', s))
# ['"Mickael A","Played":"10times"', '"Bruce B","Played":"8times"', '"John R","Played":"6times"']
संबंधित सवाल
नए सवाल
python
पायथन एक बहु-प्रतिमान है, गतिशील रूप से टाइप किया हुआ, बहुउद्देशीय प्रोग्रामिंग भाषा है। यह एक साफ और एक समान वाक्यविन्यास सीखने, समझने और उपयोग करने के लिए त्वरित होने के लिए डिज़ाइन किया गया है। कृपया ध्यान दें कि अजगर 2 आधिकारिक तौर पर 01-01-2020 के समर्थन से बाहर है। फिर भी, संस्करण-विशिष्ट पायथन सवालों के लिए, [अजगर -२.०] या [अजगर -३.x] टैग जोड़ें। पायथन वेरिएंट (जैसे, ज्योथन, PyPy) या लाइब्रेरी (उदा।, पांडस और न्यूमपी) का उपयोग करते समय, कृपया इसे टैग में शामिल करें।