2011-01-28 19 views
17

मैं 15 अंकों की संख्या (एक बड़े रेगेक्स स्ट्रिंग के हिस्से के रूप में) से मेल खाता हूं। अभी, मेरे पासविशिष्ट लंबाई के अंकों से मेल खाने के लिए Regex

\d\d\d\d\d\d\d\d\d\d\d\d\d\d\d 

लेकिन मुझे ऐसा लगता है कि ऐसा करने के लिए एक क्लीनर तरीका होना चाहिए।

उत्तर

21

यदि आपकी रेगेक्स भाषा पर्ल-संगत है: \d{15}

यह कहना मुश्किल है कि किनारों को कैसे संभालें (इसलिए आप गलती से अतिरिक्त अंक नहीं लेते हैं) बाहरी संदर्भ को जानने के बिना इस स्निपेट का उपयोग किया जाएगा।

(?:(?<!\d)\d{15}(?!\d)) 

आप वास्तव में 15 अंक के अनुक्रम किसी भी regex के बीच में डाल सकते हैं और यह के अनुरूप होगा (और केवल मैच): निश्चित संदर्भ स्वतंत्र समाधान यह है। हालांकि, यह काफी अजीब है, और आमतौर पर अनावश्यक है।

(?:\b\d{15}\b) 

लेकिन अगर पत्र तुरंत पूर्व में होना या अनुक्रम का पालन किया यह काम नहीं करेगा: एक सरल संस्करण है कि गैर अक्षरांकीय सीमाओं मान लिया गया है (उदाहरण के लिए, अंक के आसपास खाली स्थान के) इस है।

उपरोक्त दोनों मामलों में, बाहरी (?: ... ) आसपास के रेगेक्स के साथ प्राथमिकता समस्याओं से बचने के लिए केवल एक ब्रैकेटिंग निर्माण है। चाहे यह आवश्यक हो, संदर्भ पर निर्भर करता है।

\d{4,7} 

जो 7 अंक की 4 के एक न्यूनतम और अधिकतम का अर्थ है:

+0

पायथन रेगेक्स लाइब्रेरी में निर्मित का उपयोग करना। – MrGlass

+0

यह तब काम करेगा। –

27

आप पर्वतमाला इस प्रकार आम तौर पर कर सकते हैं। अपने विशेष मामले के लिए, आप एक-तर्क संस्करण, \d{15} का उपयोग कर सकते हैं।

इन दोनों रूपों को Python's regular expressions में समर्थित किया गया है - उस लिंक पर {m,n} टेक्स्ट देखें।

और ध्यान रखें कि \d{15} 400 अंकों की संख्या सहित लाइन में कहीं भी पंद्रह अंक से मेल खाता है।

^\d{15}$ 

जो आरंभ और अंत लंगर का उपयोग करता है, या

^\D*\d{15}\D*$ 

जो दोनों तरफ मनमाने ढंग से गैर अंक अनुमति देता है: आप यह सुनिश्चित करना है कि यह केवल पन्द्रह है चाहते हैं, आप की तरह कुछ का उपयोग करें।

+0

कभी नहीं, मैंने गलत – MrGlass

+2

का परीक्षण किया है यदि आप वास्तव में 15 वां करते हैं, तो आपको एंकर करना होगा: उदाहरण के लिए '^ \ d {15} $' की तलाश करें, जो सुनिश्चित करता है कि दोनों तरफ कुछ भी नहीं है - यह केवल एक स्ट्रिंग को स्वीकार करेगा पात्रों के सभी पात्रों के साथ वर्ण लंबे हैं। – paxdiablo

+0

हाँ, यह मेरी समस्या थी - मैं अपने परीक्षणों को लंगर देना भूल गया। – MrGlass

0

वहां, संख्याओं को सीमित करने के लिए मेरे पास दो तरीके हैं।

लेन,

num = 1234 
len(str(num)) <= 4 

यह आउटपुट सही/गलत हो जाएगा का उपयोग कर।

नियमित अभिव्यक्ति,

import re 
num = 12324 
re.match(r'(?:(?<!\d)\d{4}(?!\d))', str(num)) 

उत्पादन का उपयोग कर नियमित अभिव्यक्ति वस्तु या कोई भी हो जाएगा

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