2013-02-19 13 views
6

Ich habe eine Reihe von Strings, aber ich möchte nur die, die mit diesem Format halten:Python-String-Format prüfen?

x/x/xxxx xx: xx

Was ist der einfachste Weg, wenn ein String dieses Format trifft zu überprüfen? (Angenommen, ich möchte überprüfen, ob es 2/'s und ein': 'hat)

+7

Der einfachste Weg ist, es in eine Datetime umzuwandeln und den Fehler zu erfassen, wenn es fehlschlägt. Es ist ein Datetime richtig? – Ben

Antwort

11

Versuch mit regelmäßiger expresion:

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

Sie den Ausdruck optimieren kann, Ihre Bedürfnisse

+1

Die Sache ist, Sachen wie ''xxxxx/xxxxx/x 124453: 24345'' passen auch dazu. Verwenden Sie: '././.{4}. {2}:. {2}', vorausgesetzt, es handelt sich um ein beliebiges Zeichen. Wenn es Ziffern sein muss: '\ d/\ d/\ d {4} \ d {2}: \ d {2}' – TyrantWave

+0

richtig, aber der ursprüngliche Beitrag sagt: Angenommen, ich möchte überprüfen, ob es 2 hat/'s und a': '. Das Beispiel sieht wie ein Datumsformat aus, aber ist es ein Datum? – kofemann

+0

Er gab auch ein Format, das er behalten wollte, das genau wie ein Datetime-Format aussieht - ich würde annehmen, dass es persönlich für dieses Format benötigt wurde. – TyrantWave

4

Verwenden Sie time.strptime, um von String zu Zeit Struktur zu analysieren. Wenn die Zeichenfolge nicht mit dem Format übereinstimmt, wird ValueError ausgelöst.

3

Wenn Sie reguläre Ausdrücke mit Spiel Spiel auch für das Ende zu lang sein Konto muss. Ohne die Länge in diesem Code zu testen, ist es möglich, jedes Nicht-Newline-Zeichen am Ende zu entfernen. Hier ist der Code von anderen Antworten modifiziert.

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