2013-02-19 13 views
6

Ho un sacco di stringhe, ma voglio solo mantenere quelli con questo formato:Controllare il formato della stringa Python?

x/x/xxxx xx: xx

Qual è il modo più semplice per verificare se una stringa soddisfa questo formato? (Supponendo che voglio verificare se ha 2/'s e un': ')

+7

Il modo più semplice è convertirlo in un datetime e rilevare l'errore quando fallisce. È un tempo datetime? – Ben

risposta

11

prova con expresion regolare:

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

è possibile modificare l'espressione per soddisfare le vostre esigenze

+1

Lo è, cose come ''xxxxx/xxxxx/x 124453: 24345'' corrispondono anche a questo. Usa: '././.{4}. {2}:. {2}', assumendo che sia un qualsiasi personaggio. Se deve essere digitato: '\ d/\ d/\ d {4} \ d {2}: \ d {2}' – TyrantWave

+0

a destra, ma il post originale dice: Supponendo che voglio controllare se ha 2/'s e a': '. L'esempio sembra un formato di data, ma è una data? – kofemann

+0

Ha anche dato un formato che voleva conservare prima, che sembra esattamente come un formato datetime - presumevo che fosse necessario per essere esattamente in quel formato personalmente. – TyrantWave

4

Utilizzare time.strptime per analizzare dalla struttura stringa a tempo. Se la stringa non corrisponde al formato generato, ValueError.

3

Se si utilizzano le espressioni regolari con partita si deve anche tener conto della fine essere troppo lungo. Senza testare la lunghezza in questo codice è possibile far scivolare qualsiasi carattere non di nuova fine alla fine. Qui è il codice modificato da altre risposte.

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