anwser ही
regex = '|'.join([r'\b' + str(state) + r'\b' for state in states])
इसके पीछे कारण यह है कि है 'आर' उपसर्ग ने पाइथन को उस स्ट्रिंग का विश्लेषण न करने के लिए कहा है जिसे आप पास करते हैं। यदि आप स्ट्रिंग से पहले 'आर' नहीं डालते हैं, तो पाइथन ब्रेक लाइन (\ n), टैब (\ t) और ऐसे में प्रवेश करने की अनुमति देने के लिए, किसी विशेष चार में '\' द्वारा किसी भी चार को चालू करने का प्रयास करेगा। आसानी से।
जब आप '\b'
करते हैं, आप, एक स्ट्रिंग बनाने यह विश्लेषण, और बदलने के लिए 'बैकस्पेस' में '\ बी' अजगर बताओ, जबकि जब आप r'\b'
, अजगर बस दुकान '\' तो 'बी', और यह करने के रेगेक्स के लिए आप क्या चाहते हैं। रेगेक्स पैटर्न के रूप में उपयोग की जाने वाली स्ट्रिंग के लिए हमेशा 'आर' का उपयोग करें।
'आर' नोटेशन को 'कच्ची स्ट्रिंग' कहा जाता है, लेकिन यह भ्रामक है, क्योंकि पाइथन आंतरिक में कच्ची स्ट्रिंग जैसी कोई चीज़ नहीं है। पाइथन को बहुत स्मार्ट होने से बचने के लिए बस एक तरीका के रूप में इसके बारे में सोचें।
पायथन < 3.0, u'string
'में एक और संकेत है, जो स्ट्रिंग को यूनिकोड के रूप में स्टोर करने के लिए पाइथन को बताता है। आप दोनों को गठबंधन कर सकते हैं: ur"é\n"
"\ bé" को यूनिकोड के रूप में स्टोर करेगा, जबकि u"é\n"
"é" को फिर एक लाइन ब्रेक स्टोर करेगा।
कुछ अपने कोड बेहतर बनाने के तरीके:
regex = '|'.join(r'\b' + str(state) + r'\b' for state in states)
हटाया अतिरिक्त []
। यह पाइथन को स्मृति में स्टोर करने के लिए बताता है कि आप जो मूल्य उत्पन्न कर रहे हैं उसकी सूची। हम इसे यहां कर सकते हैं क्योंकि हम आपके द्वारा बनाई गई सूची का पुन: उपयोग करने की योजना नहीं बनाते हैं क्योंकि आप इसे सीधे अपने join()
में उपयोग करते हैं और कहीं और नहीं।
regex = '|'.join(r'\b%s\b' % state for state in states)
यह स्वचालित रूप से स्ट्रिंग रूपांतरण का ख्याल रखेगा और छोटा और क्लीनर होगा।जब आप पायथन में स्ट्रिंग को प्रारूपित करते हैं, तो % operator के बारे में सोचें।
यदि राज्यों में राज्य ज़िप कोड की एक सूची है, तो स्ट्रिंग के रूप में संग्रहीत किया जाना चाहिए, int के रूप में नहीं। उस मामले में, आप प्रकार कास्टिंग छोड़ सकते हैं और यह और भी छोटा कर सकते हैं:
regex = r'\b%s\b' % r'\b|\b'.join(states)
अंततः, आप रेगुलर एक्सप्रेशन से बिल्कुल भी जरूरत नहीं हो सकती है। आप सभी की परवाह की जाँच करने के लिए है, तो अगर जिप कोड में से एक दिया स्ट्रिंग में है, तो आप सिर्फ in
(एक स्ट्रिंग किसी सूची में है अगर तरह की जांच एक iterable में अगर एक आइटम है,) का उपयोग कर सकते हैं:
matches = [s for s in states if s in 'grand rapids, mi 49505']
अंतिम शब्द
मैं समझता हूँ कि आप निराश जब एक नई भाषा सीखने हो सकता है लेकिन आपके सवाल का एक उचित शीर्षक देने के लिए समय लगता है। इस वेबसाइट में, शीर्षक को एक प्रश्न चिह्न के साथ समाप्त होना चाहिए और समस्या के बारे में विशिष्ट विवरण देना चाहिए।
नोट: वर्ग कोष्ठक निरर्थक (वास्तव में, हानिकारक हैं: के बीच का अंतर 'ओ (एन) 'और' ओ (1)' मेमोरी खपत), इसके बजाए [जनरेटर अभिव्यक्ति] (http://docs.python.org/tutorial/classes.html#generator-expressions) का उपयोग करें। – delnan