REGEX für ECO-DMS

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
biba5384
User
Beiträge: 2
Registriert: Sonntag 24. November 2024, 21:48

Hallo,
ich bin ein absoluter Neuling und kann nicht programmieren.
Ich nutze das ECODMOS wir ich über einen Vorlagenmanger etwas automatisch aus Dokumenten auslesen kann.

Ich habe folgendes Problem:
Auf einer A4-Seite stehe die beiden Angaben 009 2023
Um diese habe ich einen Rahmen aufgezogen und dann werden diese auch ausgelsen.
Allerdings im Format 0092023.
Nun habe ich folgenden Befehl versucht: (/(\d{3})\s(\d{4}),"$1-$2")
Leider klappt das nicht.
Ich möchte gerne, dass er die beiden ausgelesenen Zahlen in das Fiormat 009-2023 ausgibt.
Kann mir da jemand helfen?

Vielen DANK!
Benutzeravatar
DeaD_EyE
User
Beiträge: 1239
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Ohne die Daten zu kenne, würde ich das hier vorschlagen:

Code: Alles auswählen

import re

REGEX = re.compile(r"(\d{3})(\d{4})")



text = """

0092023  asdfadf 
0092023  adfasdfa
0092023   adfasdf
0092023
0092023  asdfad
0092023 asf
0092023  asdfa 
0092023  dfgadf
0092023  ölargaädgar

!!!
"""


print("Mit Regex")
for line in text.splitlines():
    if match := REGEX.match(line):
        number, year = match.groups()
        print(f"{number}-{year}")
        


print("\nOhne Regex")
for line in text.splitlines():
    try:
        number_block, _ = line.split(maxsplit=1)
    except ValueError:
        continue
    if number_block.isdecimal():
        number, year = number_block[:3], number_block[3:]
        print(f"{number}-{year}")

Falls du mehr Daten aus der Tabelle holen willst, kannst du den Regex erweitern. Man kann aber auch ohne Regex arbeiten. Im zweiten Beispiel splitte ich den Text und begrenze das auf eine Teilung. Wenn weniger Elemente (nur 1) daraus resultieren, kommt es zu einem ValueError, da auf der Linken Seite mehr Ziele für die Zuweisung sind, als auf der rechten Seite des Gleichheitszeichens.
Dann prüfe ich noch, ob es einer Nummer ist. Auch hier könnte man ein try...except verwenden und im try-block den str in einen int umwandeln. Wenn es keine Ganzzahl ist, wird ein ValueError ausgelöst. Das ist das Prinzip: It's Better to Ask For Forgiveness Than Permission
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Benutzeravatar
__blackjack__
User
Beiträge: 14047
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@biba5384: Natürlich klappt das nicht einen regulären Ausdruck anzugeben der ein Whitespace-Zeichen zwischen den Zahlen erwartet wenn Du ja selbst schon gemerkt hast, dass da eben kein Zeichen zwischen den Zahlen steht.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten