Python bestimmte Leerzeichen in einem String ersetzen zu Tabulator?

2 Antworten

Von Experte ralphdieter bestätigt

Naja. Wie üblich bietet sich eine Regex an. Im Grunde suchst du hier nach dem ersten Auftreten von Leerzeichen, das zwischen Buchstaben und Zahlen zu finden ist. Das wäre dann in etwa so ein Ausdruck:

[a-z.](\s+)[1-9]

Und das dann entsprechend in re.sub() o.ä. füttern - du willst dabei aber nur die Gruppe ersetzen (den Ausdruck in Klammern), also müssen ggf. Backreferences rein.

Jetzt schnell ausprobiert:

>>> import re
>>> regex = r"([a-z.])(\s+)([1-9])"
>>> re.sub(regex, "\\1\t\\3", "Parkstr.   5 - 6")
'Parkstr.\t5 - 6'
ralphdieter  09.09.2021, 11:42

Man könnte sogar Ziffern im Straßennamen zulassen, wenn sie nicht hinter einem Leerzeichen stehen:

regex = r"(.*?)(\s+)(\d)" # trennt an der ersten Ziffer nach WS

Das funktioniert aber auch nicht bei der Straße des 17. Juni :-(

1
alfredo153  09.09.2021, 11:45
@ralphdieter

Dann müsste man noch ausschließen dass hinter den Ziffern Buchstaben sind...außer natürlich es ist sowas wie die "Straße des 17. Juni 5a", verflixt - manchmal ist das englische System mit Hausnummer zuerst doch besser :-)

0
MrAmazing2  09.09.2021, 11:42

Echt Scheiße dass Python (oder zumindest re) kein \K kann, damit wärs noch viel einfacher. Hab grad 10 Minuten gesucht wie ich‘s ohne mache, das mit den Capturing Groups kannte ich noch nicht - Da warst du wohl schneller.

0

Mit Regex geht‘s:

import re
str = "Am Kreuzweg 5"
str = re.sub("(^\\D*) (?=\\d)", "\\1\t", str)
Woher ich das weiß:Hobby – Programmieren ist mein Hobby & Beruf