2017-03-24 1 views
1

Ich habe eine Reihe von Zeichenfolgen, die eine Teilzeichenfolge ähnlich FRI, 24-MAR-2017 enthalten. Ich habe die folgenden erstellt diese zu erfassen und jeweils entfernen FRI, und Nachbestellung das Datum als 2017-MAR-24:Regex stimmt mit einigen Teilzeichenfolgen überein, während scheinbar identische Teilzeichenfolgen ignoriert werden?

t = re.sub(r'\b((Mon|Tue|Wed|Thu|Fri|Sat|Sun), (0[1-9]|1[012])-([A-Z]+)-(\d{4}))\b', r'\5-\4-\3', temp) 

Während jedoch diese mehr oder weniger funktioniert, einige Saiten sind aus unbekannten Gründen, scheinbar ignoriert und gehen Sie diese Prüfung unbeeinflusst durch. Ich habe mit beiden mit \s und . getestet, aber ohne Erfolg.

Eine Zeichenfolge, die gerade fein passiert ist: Sat, 01-APR-2017

Eine Zeichenfolge, die nicht mit ist: Thu, 13-APR-2017

Hier ist eine Kopie von etwas Ausgabe zu veranschaulichen (bitte beachten Sie, dass ich jede Saite zweimal drucken, einmal vor die oben re.sub, und einmal nach)

Wed, 29-MAR-2017||Thu, 30-MAR-2017 
Wed, 29-MAR-2017||Thu, 30-MAR-2017 

Sat, 01-APR-2017||Sun, 02-APR-2017 
2017-APR-01||2017-APR-02||Yes|Yes 

Zusätzliche Informationen: das Eingangssignal von einer Website Tabelle mit Selen und beautifulsoup, obwohl nichts in der HTML-indic lesen ates, dass es unsichtbare oder anderweitig obskure Zeichen geben sollte; Es ist überall das Gleiche.

+0

Heirate mich. Im Ernst, das war es, danke! Ich kann nicht glauben, dass ich das verpasst habe ... – vham

+0

Die Regex in meinem ersten Kommentar war nicht richtig (da '10' und' 20' nicht mit dieser Regex übereinstimmen). Ich habe eine korrekte Lösung gepostet. –

Antwort

1

Der (0[1-9]|1[012]) Teil in Ihren Regex-Übereinstimmungen Zahlen von 00 zu 12, das heißt, Monate.

Ersetzen Sie es mit (0[1-9]|[12][0-9]|3[01]):

  • ( - konstruieren Gruppierung starten
    • 0[1-9] - 01 bis 09
    • | - oder
    • [12][0-9]-10 bis 29
    • | - oder
    • 3[01] - 30 oder 31.

Auf diese Weise werden Sie Tage, von 01 bis 31 entsprechen.

+1

Vielen Dank! – vham

Verwandte Themen