2013-02-19 21 views
6

Mam kilka strun, ale chcę tylko, aby zachować te z tego formatu:Sprawdź format ciągów python?

x/x/xxxx xx: xx

Co jest najprostszym sposobem, aby sprawdzić, czy ciąg spełnia tego formatu? (Zakładając, że chcę sprawdzić, czy ma 2/'s i ":")

+7

Najprostszym sposobem jest skonwertowanie go na datetime i wychwycenie błędu w przypadku niepowodzenia. To jest data, prawda? – Ben

Odpowiedz

11

spróbować z regularnym expresión:

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

można dostosować wyrażenie dopasowane do potrzeb

+1

Rzecz polega na tym, że rzeczy takie jak "xxxxx/xxxxx/x 124453: 24345" również pasują do tego. Użyj: '././ .{4}. {2}:. {2}', zakładając, że jest to jakakolwiek postać. Jeśli muszą to być cyfry: '\ d/\ d/\ d {4} \ d {2}: \ d {2}' – TyrantWave

+0

prawo, ale oryginalny post mówi: Zakładając, że chcę sprawdzić, czy ma 2/i s i a:. Przykład wygląda jak format daty, ale czy to jest randka? – kofemann

+0

Podał także format, który chciał zachować wcześniej, który wygląda dokładnie tak samo jak format datetime - zakładam, że było to konieczne, aby być dokładnym w tym formacie osobiście. – TyrantWave

4

Użyj time.strptime do parsowania ze string do struktury czasu. Jeśli ciąg nie jest zgodny z formatem, podnosi on ValueError.

3

Jeśli używasz wyrażeń regularnych z meczu należy także uwagę do końca zbyt długo. Bez przetestowania długości w tym kodzie możliwe jest poślizgnięcie dowolnej postaci spoza linii nowej linii na końcu. Oto kod zmodyfikowany z innych odpowiedzi.

import re 
r = re.compile('././.{4} .{2}:.{2}') 
s = 'x/x/xxxx xx:xx' 
if len(s) == 14: 
    if r.match(s): 
    print 'matches' 
Powiązane problemy