brauche hilfe zu einem regulaeren ausdruck

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
roschi
User
Beiträge: 225
Registriert: Samstag 29. März 2008, 18:58
Wohnort: Thueringen, Deutschland
Kontaktdaten:

hallo!

und wieder einmal brauche ich eure hilfe! :)

ich brauche einen regulaeren ausdruck, der mir ein datum und eine zeitangabe zerpflueckt...

ich nutze fast nie regular expression, also verhaut mich nicht, wenn das hier voelliger schwachsinn ist (was ich leider befuerchte) :lol::

Code: Alles auswählen

pattern = "(%d%d).(%d%d).(%d%d%d%d) (%d%d):(%d%d)"
m = re.match(pattern, "19.09.2008 22:00")
was sagt ihr dazu? ich bekomme dabei immer None! woran kann das liegen? kann man den ausdruck noch verkuerzen?

mfg
roschi
[size=117]Fuer Alle, die in Python einsteigen wollen, kann ich das Buch [url=http://abop-german.berlios.de/]A Byte of Python[/url] nur waermstens empfehlen![/size]
BlackJack

'%d' matcht ein Prozentzeichen gefolgt von einem kleinen 'd'. '\\d' matcht eine Ziffer. :-)
Benutzeravatar
roschi
User
Beiträge: 225
Registriert: Samstag 29. März 2008, 18:58
Wohnort: Thueringen, Deutschland
Kontaktdaten:

danke!

:evil:

natuerlich! das hatte ich verwechselt. vielen, vielen dank! jetzt gehts einwandfrei.

mfg
roschi
[size=117]Fuer Alle, die in Python einsteigen wollen, kann ich das Buch [url=http://abop-german.berlios.de/]A Byte of Python[/url] nur waermstens empfehlen![/size]
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Statt den \d zweimal oder viermal hintereinander kannst du auch \d{2} bzw \d{4} nutzen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

Leonidas hat geschrieben:Statt den \d zweimal oder viermal hintereinander kannst du auch \d{2} bzw \d{4} nutzen.
bekommt er dadutch auch die Punkt,Doppelpunkt aufschlüsselung

gibt es hierfür \d{2} einen wiki docu beitrag
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

sea-live hat geschrieben:gibt es hierfür \d{2} einen wiki docu beitrag
Kannst du hier nachlesen: http://docs.python.org/lib/re-syntax.html
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

sea-live hat geschrieben:
Leonidas hat geschrieben:Statt den \d zweimal oder viermal hintereinander kannst du auch \d{2} bzw \d{4} nutzen.
bekommt er dadutch auch die Punkt,Doppelpunkt aufschlüsselung
Was? Ich nehme mal an, dass du meinst ob man mit \d{2} auch die Punkte und Doppelpunkte richtig match. Nein, {2} bedeutet nur, dass das vorhergehende zweimal hintereinander gematcht werden muss, also werden aus "Ziffer zwischen 0 und 9" einfach zwei mal "Ziffer zwischen 0 und 9".
sea-live hat geschrieben:gibt es hierfür \d{2} einen wiki docu beitrag
Wiki-Doku.. was? Ich nehme mal an, dass du fragst ob das dokumentiert ist. Ja ist es, einmal in der Modul-Dokumentation und einmal im HOWTO.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
roschi
User
Beiträge: 225
Registriert: Samstag 29. März 2008, 18:58
Wohnort: Thueringen, Deutschland
Kontaktdaten:

vielen dank fuer die vereinfachte syntax!

ich habe das jetzt in meinem programm (ein kleiner terminplaner) eingebaut. wenn er fertig ist kann ich ihn ja auch ins Showvcase-Forum stellen.

so, ich werde mich sicherlich bald mal wieder melden. :)

schoenes wochenende noch euch allen!

mfg
roschi
[size=117]Fuer Alle, die in Python einsteigen wollen, kann ich das Buch [url=http://abop-german.berlios.de/]A Byte of Python[/url] nur waermstens empfehlen![/size]
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

roschi hat geschrieben:

Code: Alles auswählen

pattern = "(%d%d).(%d%d).(%d%d%d%d) (%d%d):(%d%d)"
m = re.match(pattern, "19.09.2008 22:00")
Dafür würde ich nicht re nehmen, sondern es so in datetime umwandeln:

Code: Alles auswählen

import datetime, time

date_string = "19.09.2008 22:00"
format="%d.%m.%Y %H:%M"

# Python ab 2.5
#dt = datetime.strptime(date_string, format)

# Python bis 2.5
struct_time = time.strptime(date_string, format)
dt = datetime.datetime(*struct_time[:6])

print dt
siehe:
http://docs.python.org/dev/library/date ... e.strptime
Format syntax: http://docs.python.org/dev/library/time ... e.strftime

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
roschi
User
Beiträge: 225
Registriert: Samstag 29. März 2008, 18:58
Wohnort: Thueringen, Deutschland
Kontaktdaten:

nicht schlecht, aber:
>>> import datetime, time
>>> date_string = "19.09.2008 22:00"
>>> format="%d.%m.%Y %H:%M"
>>> dt = datetime.strptime(date_string, format)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'strptime'
ich habe aber python 2.5.1!
da muesste das doch eigendlich gehen, oder?

naja, am ende sollte da ein tuple herauskommen. daher ist das mit regular expression gar nicht mal so schlecht. sonst muesste ich es ja erst wieder konvertieren. :)

mfg
roschi
[size=117]Fuer Alle, die in Python einsteigen wollen, kann ich das Buch [url=http://abop-german.berlios.de/]A Byte of Python[/url] nur waermstens empfehlen![/size]
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Mein Fehler. So sollte es gehen:

Code: Alles auswählen

dt = datetime.datetime.strptime(date_string, format)
Raus kommt nicht ein Tupel, so wird es nur angezeigt. Es ist ein datetime Objekt. Daraus kannst du u.a. jede String Form mit strftime generieren:
http://docs.python.org/dev/library/date ... e.strftime

Mit datetime Objekten kann man ansonsten eine Menge anstellen. Was brauchst du denn hinterher?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
roschi
User
Beiträge: 225
Registriert: Samstag 29. März 2008, 18:58
Wohnort: Thueringen, Deutschland
Kontaktdaten:

wunderbar, so klappts!

ich brauche am ende die sekunden seit 1970. bisher mache ich mache das jetzt so:

Code: Alles auswählen

import datetime, time
date_string = "19.09.2008 22:00"
format="%d.%m.%Y %H:%M"
dt = datetime.datetime.strptime(date_string, format)
seconds = time.mktime(dt.timetuple())
so werde ich es wahrscheinlich auch beibehalten.

nochmal ein grosses dankeschoen!

mfg
roschi
[size=117]Fuer Alle, die in Python einsteigen wollen, kann ich das Buch [url=http://abop-german.berlios.de/]A Byte of Python[/url] nur waermstens empfehlen![/size]
JanDMC
User
Beiträge: 95
Registriert: Donnerstag 23. September 2004, 19:35
Kontaktdaten:

Für alle die hier in diesem Thread landen, es gibt ein Programm das heißt "RegexCoach", damit kann man den gewünschten Text eingeben und herumprobieren um sich seine Regex zusammen zu basteln


mfg
joa nää python is toll :D
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Ich mag kodos :-) Gibt aber vermutlich ettliche solcher Tools!
snakeseven
User
Beiträge: 408
Registriert: Freitag 7. Oktober 2005, 14:37
Wohnort: Berlin
Kontaktdaten:

Hi Roschi,
mir hat das hier sehr geholfen:

http://www.galileocomputing.de/openbook ... 64481427d7

Gruß, Seven
Benutzeravatar
roschi
User
Beiträge: 225
Registriert: Samstag 29. März 2008, 18:58
Wohnort: Thueringen, Deutschland
Kontaktdaten:

@snakeseven:
ja, das kapitel hab ich mir danach auch schon mal durchgelesen. aber danke fuer den tipp. ist mir gleich eingefallen, nachdem ich den letzten post schrieb. :)

@Hyperion & @JanDMC:
oh, die tools werde ich mir mal anschauen. danke fuer den hinweis!

mfg
roschi
[size=117]Fuer Alle, die in Python einsteigen wollen, kann ich das Buch [url=http://abop-german.berlios.de/]A Byte of Python[/url] nur waermstens empfehlen![/size]
Benutzeravatar
roschi
User
Beiträge: 225
Registriert: Samstag 29. März 2008, 18:58
Wohnort: Thueringen, Deutschland
Kontaktdaten:

so, ich schreib das mal noch mit in diesen thread rein.
es passt ja gewisser maßen dazu:
---------------------------------------------------------------------------------
kann mir jemand sagen, wie mein pattern aussehen muss, damit ich z.B. aus:

Code: Alles auswählen

[SETTINGS]
lenght = 80
height = 40
ein solches tuple/liste bekomme?

Code: Alles auswählen

('lenght = 80', 'height = 40')
ich denke, mir kann da jemand helfen, und hoffe auf eine schnelle antwort. :)

mfg
roschi
[size=117]Fuer Alle, die in Python einsteigen wollen, kann ich das Buch [url=http://abop-german.berlios.de/]A Byte of Python[/url] nur waermstens empfehlen![/size]
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Code: Alles auswählen

re.findall(r'^\w* = \d*$', s, re.MULTILINE)
Wobei es an dieser Stelle sinnvoller wäre, den INI-Parser aus der Stdlib zu verwenden.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
roschi
User
Beiträge: 225
Registriert: Samstag 29. März 2008, 18:58
Wohnort: Thueringen, Deutschland
Kontaktdaten:

@leonidas:
vielen dank!
auch wenn ich das pattern MOMENTAN noch nicht verstehe :)

ich wollte meinen nehmen, weil ich mir den selber gestalten kann.
mein parser soll aehnlich wie 'configobj' werden. aber 'configobj' ist so groß und umfangreich!

naja, was solls, ich kann mich erst am donnerstag wieder melden.
bis dahin: viel spaß noch in der woche!

mfg
roschi
[size=117]Fuer Alle, die in Python einsteigen wollen, kann ich das Buch [url=http://abop-german.berlios.de/]A Byte of Python[/url] nur waermstens empfehlen![/size]
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

roschi hat geschrieben:auch wenn ich das pattern MOMENTAN noch nicht verstehe :)
Ist ganz einfach. Zuerst wird ein Zeilenanfang gematcht (^), danach kommen so viele Buchstaben (\w) wie möglich (*), gefolgt von einem Leerzeichen, einem Ist-gleich-Zeichen und noch einem Leerzeichen, danach so viele Zahlen (\d) wie möglich (*), gefolgt von einem Zeilenende.

Das gibt natürlich ein Problem mit den Whitespaces, wenn es nicht exakt so viele gibt, wie der reguläre Ausdruck erfordert, somit wäre ein regulärer Ausdruck der alles richtig matcht komplizierter. Daher nimmt man für so etwas dann richtige Parser.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten