Problem mit einem regulären 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
drnicolas
User
Beiträge: 92
Registriert: Sonntag 24. Juli 2016, 10:32

Ich versuche aus einem längeren Zeit Datumsangaben herauszulesen.

Dazu habe ich diesen regulären Ausdruck gefunden: "[0-3]?[0-9][\/.][0-3]?[0-9][\/.](?:[0-9]{2})?[0-9]{2}$"
Wenn ich das in einem Smulator ausprobiere, dann funktioniert das. Sowohl für 2stellige Jahresangaben wie auch vierstellig.

Leider aber nur wenn der Teststring tatsächlich nru ein Datum ist.
Setzte ich Zeichen davor und/oder dahinter, dann wird kein Match gefunden.

Ändere ich das auf ".*[0-3]?[0-9][\/.][0-3]?[0-9][\/.](?:[0-9]{2})?[0-9]{2}$" (also .* davor), dann kann ich beliebige Zeichen vor das Datum setzen.

Stehen aber Zeichen DAHINTER, dann wird wiederum kein Match gefunden.

Ich finde leider keine Lösung für einen modifizierten Regex.

Any ideas ?
geraldfo
User
Beiträge: 54
Registriert: Samstag 28. Januar 2023, 20:19
Wohnort: Nähe Wien

Schau dir einmal die Bedeutung des Dollarzeichens an!

LG
Benutzeravatar
snafu
User
Beiträge: 6753
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Außerdem gibt es neben re.match() auch re.search(). Bei letzterem können auch Zeichen vor und hinter dem Treffer stehen. Das Match wäre dann das Datum isoliert.
Benutzeravatar
__blackjack__
User
Beiträge: 13268
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Wobei ich bei `re.search()` noch sicherstellen wollen würde, das da keine Ziffern oder Trennzeichen vor oder hinter dem Match stehen, damit "42/20.5.202323" keinen Treffer ergibt. Und vielleicht möchte man ”Treffer” mit gemischten Trennzeichen auch ausschliessen, also beispielsweise "20.05/23" nicht als Treffer werten.
Please call it what it is: copyright infringement, not piracy. Piracy takes place in international waters, and involves one or more of theft, murder, rape and kidnapping. Making an unauthorized copy of a piece of software is not piracy, it is an infringement of a government-granted monopoly.
drnicolas
User
Beiträge: 92
Registriert: Sonntag 24. Juli 2016, 10:32

Vielen Dank !
Das hat mir sehr weiter geholfen.
Wie müsste ich den regex ändern damit die gemischten Trennzeichen mit erfasst/ausgeschlossen werden?
narpfel
User
Beiträge: 646
Registriert: Freitag 20. Oktober 2017, 16:10

@drnicolas: Das erste Trennzeichen in einer Gruppe capturen und dann für das andere eine Backreference benutzen.
Antworten