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.
Benutzeravatar
roschi
User
Beiträge: 225
Registriert: Samstag 29. März 2008, 18:58
Wohnort: Thueringen, Deutschland
Kontaktdaten:

Freitag 19. September 2008, 20:57

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

Freitag 19. September 2008, 21:27

'%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:

Freitag 19. September 2008, 21:50

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
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 19. September 2008, 23:13

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 Modvoice
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

Samstag 20. September 2008, 08:29

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

Samstag 20. September 2008, 08:43

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
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Samstag 20. September 2008, 08:47

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 Modvoice
Benutzeravatar
roschi
User
Beiträge: 225
Registriert: Samstag 29. März 2008, 18:58
Wohnort: Thueringen, Deutschland
Kontaktdaten:

Samstag 20. September 2008, 09:06

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
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Samstag 20. September 2008, 09:28

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

CMS in Python: http://www.pylucid.org
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:

Samstag 20. September 2008, 11:16

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
Moderator
Beiträge: 8483
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Samstag 20. September 2008, 11:21

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?

CMS in Python: http://www.pylucid.org
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:

Samstag 20. September 2008, 11:33

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:

Mittwoch 24. September 2008, 18:24

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: 7472
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Mittwoch 24. September 2008, 19:50

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

Donnerstag 25. September 2008, 09:45

Hi Roschi,
mir hat das hier sehr geholfen:

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

Gruß, Seven
Antworten