2013-04-11 8 views
6

मैं कुछ परेशानी अजगर नियमित अभिव्यक्ति के आसपास मेरे सिर लपेटकर विशिष्ट मानों को निकालने के लिए एक रेगुलर एक्सप्रेशन साथ आने के लिए हो रहा है को निकाला जा डाटा।साथ अजगर रेगुलर एक्सप्रेशन

पेज मैं पार्स करने के लिए कोशिश कर रहा हूँ productIds की एक संख्या जो इस प्रारूप

\"productId\":\"111111\" 

मैं सभी मूल्यों, 111111 इस मामले में निकालने के लिए की जरूरत में प्रदर्शित है।

+0

आप पढ़ सकते हैं [अजगर नियमित अभिव्यक्ति पर दस्तावेज़ीकरण] है (http://docs.python.org/2/library/re.html)? –

+1

क्या यह है कि आप regex, पायथन, या दोनों के लिए नए हैं? आपको किस भाग में मदद चाहिए? आपने क्या प्रयास किया है की – cmd

+1

संभावित डुप्लिकेट [कैसे पायथन में एक स्ट्रिंग के अंदर से एक-स्ट्रिंग को निकालने के लिए?] (http://stackoverflow.com/questions/4666973/how-to-extract-a-substring-from-inside-a-string-in -पीथॉन) –

उत्तर

15
t = "\"productId\":\"111111\"" 
m = re.match("\W*productId[^:]*:\D*(\d+)", t) 
if m: 
    print m.group(1) 

अर्थ मैच गैर शब्द अक्षर (\W*), तो productId गैर स्तंभ वर्ण ([^:]*) और एक : द्वारा पीछा किया। फिर गैर अंक (\D*) और मैच और कब्जे के बाद अंक ((\d+)) मेल खाते हैं।

आउटपुट

111111 
0

इस प्रयास करें,

:\\"(\d*)\\" 

अपने डेटा का अधिक उदाहरण दे दो अगर यह तुम क्या चाहते नहीं करता है।

7

कुछ इस तरह:

In [13]: s=r'\"productId\":\"111111\"' 

In [14]: print s 
\"productId\":\"111111\" 

In [15]: import re 

In [16]: re.findall(r'\d+', s) 
Out[16]: ['111111'] 
+0

मुझे यह और पाइथोनिक लगता है। :) – skytreader

0

यहाँ बैकस्लैश, भ्रम को जोड़ सकते हैं, क्योंकि वे दोनों (गैर कच्चे) अजगर तार द्वारा और regexp वाक्य रचना से एक भागने चरित्र के रूप में इस्तेमाल कर रहे हैं।

इस प्रारूप आप पोस्ट से उत्पाद ID निकालता है:

re_prodId = re.compile(r'\\"productId\\":\\"([^"]+)\\"') 

कच्चे स्ट्रिंग r'...' बैकस्लैश से बचने का एक स्तर को दूर करता है; स्ट्रिंग डेलीमीटर के रूप में एक एकल उद्धरण का उपयोग डबल कोट्स से बचने की आवश्यकता को दूर करता है; और आखिरकार बैकस्लाश को रेगेक्स भाषा में उनके विशेष अर्थ के कारण दोगुना (केवल एक बार) दोगुना कर दिया जाता है।

आप कुछ पाठ में सभी मैचों को खोजने के लिए regexp वस्तु की findall() विधि का उपयोग कर सकते हैं:

re_prodId.findall(text_to_search) 

यह सभी उत्पाद id की एक सूची प्रदान करेगा।

संबंधित मुद्दे