2013-02-19 73 views
6

मैं तार का एक समूह है, लेकिन मैं केवल इस प्रारूप के साथ लोगों को रखना चाहते हैं:पायथन स्ट्रिंग प्रारूप की जांच करें?

एक्स/एक्स/xxxx XX: XX

एक स्ट्रिंग इस प्रारूप को पूरा करता है की जाँच करने के लिए सबसे आसान तरीका क्या है? (मान लीजिए कि क्या यह जांचना चाहता है कि इसमें 2/एस और ':' है)

+7

सबसे आसान तरीका इसे डेटाटाइम में परिवर्तित करना और विफल होने पर त्रुटि को पकड़ना सबसे आसान तरीका है। यह एक समय-समय पर सही है? – Ben

उत्तर

11

नियमित expresion साथ कोशिश:

import re 
r = re.compile('.*/.*/.*:.*') 
if r.match('x/x/xxxx xx:xx') is not None: 
    print 'matches' 

आप ठीक कर सकते हैं अभिव्यक्ति अपनी आवश्यकताओं

+1

बात यह है कि, 'xxxxx/xxxxx/x 124453: 24345'' जैसी चीजें भी इससे मेल खाती हैं। उपयोग करें: './//{4}। {2}:। {2} ', मान लीजिए कि यह कोई चरित्र है। यदि इसे अंक होना चाहिए: '\ d/\ d/\ d {4} \ d {2}: \ d {2}' – TyrantWave

+0

सही है, लेकिन मूल पोस्ट कहती है: मान लीजिए कि मैं जांच करूँगा कि उसके पास 2 है/एस और एक ':'। उदाहरण दिनांक प्रारूप की तरह दिखता है, लेकिन क्या यह एक तारीख है? – kofemann

+0

उन्होंने एक प्रारूप भी दिया जो वह पहले रखना चाहता था, जो एक डेटाटाइम प्रारूप की तरह दिखता है - मुझे लगता है कि व्यक्तिगत रूप से उस प्रारूप के लिए सटीक होना आवश्यक था। – TyrantWave

4

स्ट्रिंग से समय संरचना से पार्स करने के लिए time.strptime का उपयोग करें। यदि स्ट्रिंग प्रारूप से मेल नहीं खाती है तो यह ValueError उठाती है।

3

मैच के लिए आप मैच तुम भी अंत बहुत लंबा किया जा रहा है के लिए होना चाहिए के साथ नियमित अभिव्यक्ति का उपयोग करते हैं। इस कोड में लंबाई का परीक्षण किए बिना अंत में किसी भी गैर-न्यूलाइन चरित्र को पर्ची करना संभव है। यहां अन्य उत्तरों से कोड संशोधित किया गया है।

import re 
r = re.compile('././.{4} .{2}:.{2}') 
s = 'x/x/xxxx xx:xx' 
if len(s) == 14: 
    if r.match(s): 
    print 'matches' 
संबंधित मुद्दे