2012-04-10 9 views
1

Ich bin auf der Suche nach einer Möglichkeit, Daten (Tag, Monat, Jahr) aus einem Text zu extrahieren. Das heißt, ich möchte alle Daten (oder vielmehr - so viele wie möglich) in einer vom Menschen geschriebenen Zeichenfolge finden.Allgemein Python Regex, um Daten (d, m, y) in verschiedenen Formaten zu extrahieren

Gibt es einen regulären Python-Ausdruck, der so viele mögliche Formate wie möglich abdeckt?

Kommentar:

from dateutil.parser import parse 
parse(s, fuzzy = True) 

funktioniert gut, aber es ist beschränkt auf ein Datum nach einer Zeichenfolge.

Beispiel:

Ein Programm statt etw vom 21. Januar 2013 bis zum 15. Februar 2013 unter Anträge auf Förderung werden 15 bis April angenommen, 2012 Benachrichtigung über die Annahme: 1. August oder später. Vorzeitige Zahlung fällig: 15.10.12. usw. Spät: 20.11.12.

Normalerweise (aber nicht immer) Konvention ist mehr oder weniger konsistent für einen einzigen Eintrag.

Es ist einfach, eine Regex für ein paar Fälle zu erstellen, kann ich das tun. Die Frage ist, ob es bereits eine Sammlung von vielen verschiedenen gibt.

+3

Reguläre Ausdrücke sind nicht Parser. –

+0

@ IgnacioVazquez-Abrams Pars geändert -> extrahieren. –

+0

können Sie uns ein Beispiel für die Eingabe geben? – KurzedMetal

Antwort

0

Ich habe mit dem Modul viel Glück hatte parsedatetime:

from parsedatetime import parsedatetime, parsedatetime_consts 

pdt = parsedatetime.Calendar(parsedatetime_consts.Constants()) 
parsed, code = pdt.parse('''Your string''') 
+1

Ich glaube, das OP möchte * die * Daten finden, bevor sie konvertiert werden. Das Finden ist der noch härtere Teil. –

1

Wenn Sie Ihre eigene Rolle möchten, können Sie Inspiration aus der Regexp::Common ‚s time Modul und die Muster dort für die Zeit und Daten nehmen können .

Seien Sie gewarnt: the code (direct link to it) is not trivial.

+1

+1: Heilige raucht, Batman! Das ist ein ausgezeichneter Weg, um zu zeigen, dass diese Aufgabe nicht trivial ist. Ich mag besonders die Dokumentation Kommentare im Code - "* Wenn die Daten sind wild variabel, wie rohe Benutzereingabe, geben Sie auf und verwenden Sie die L oder L Modul. *" –

Verwandte Themen