Zum Inhalt springen

Reguläre Ausdrücke - Bestimmte fixe und und bestimmte Variable Wörter ausschließen


Empfohlene Beiträge

Geschrieben

Hallo zusammen,

mein Name ich Christian. Ich hänge gerade an folgendem Problem fest: Per OCR werden bestimmte Bereich in einem Dokument gescannt. Per RegEx sollen nun teile davon ausgelesen werden.

Der OCR Text lautet (zum Beispiel) wie folgt:

Bauvorhaben: HV Musterverwaltung - Projektbezeichnung B21-09498

Folgendes ist gegeben: das Wort "Bauvorhaben:" ist immer vorhanden und soll nicht übergeben werden.

Die Projektnummer "B21-09498" wird ebenfalls nicht benötigt. Diese ist aber Variabel und nach zwei Schemata aufgebaut: entweder "B" gefolgt von der Jahreszahl, Bindestrich und dann 5 Ziffern ODER "B" gefolgt von der Jahreszahl, KEIN Bindestrich und 6 Ziffern. Diese Projektnummer lese ich bereits für ein zweites Feld mit folgendem Ausdruck aus:

[B][0-9]{2}[-][0-9]{5}|[B][0-9]{8}

Das klappt wunderbar. Ich hänge nun, weil ich nicht weiß, wie ich die beiden beschriebenen Blöcke am Anfang und Ende aus der Suche ausschließe. Ich möchte lediglich den Bereich "HV Musterverwaltung - Projektbezeichnung" haben.

Bisher habe ich folgendes gemacht:

(?<=Bauvorhaben: ).*

Damit bekomme ich den gesamten String geliefert. Aber wie schließe ich nun die Projektnummer aus?

Vielleicht hab jemand von euch eine Idee.

Schönen Abend euch!

Gruß

Christian

PS Gibt es bei euch auch einen Bereich wo man sich Vorstellen darf?

 

Geschrieben (bearbeitet)
vor 9 Stunden schrieb c77ar:

Aber wie schließe ich nun die Projektnummer aus?

(Folgender Vorschlag unter der Prämisse dass du ECMAScript regex verwendest)

Ich würde es mit einer non-capturing group machen: 
(Bauvorhaben\:.*)(?:B\d{2}-\d{5})


Der fett markierte Teil ist die Syntax für eine non-capturing group. Damit bekommst als subexpression match nur den vorderen String.

Bearbeitet von blaargh
Geschrieben

Moin,

steht die Projektnummer immer am Ende? Dann kannst du einfach alles hintereinander wegschreiben.

^Bauvorhaben: (?<ergebnis>.*)(?>B\d{2}-\d{5}|B\d{8})$

Wenn die Projektnummer irgendwo im Text vorkommen kann, würde ich nachsehen welche Möglichkeiten du hast um den Text zu bearbeiten. Anstatt einen komplizierten großen Regex draufzujagen, könntest du evtl. mit 2 einfachen die Projektnummer entfernen.

 

vor 9 Stunden schrieb c77ar:

PS Gibt es bei euch auch einen Bereich wo man sich Vorstellen darf?

Sure!

 

Geschrieben
vor 10 Stunden schrieb c77ar:

Vielleicht hab jemand von euch eine Idee.

Alternativ splittest du den String und ignorierst den ersten und den letzten Teil des Arrays.

Geschrieben
vor 13 Stunden schrieb blaargh:

(Bauvorhaben\:.*)(?:B\d{2}-\d{5})

Damit bekommt man aber zwei matches für group 0 und group 1? und in beiden steht auch "Bauvorhaben", was ja nicht im Ergebnis stehen sollte.

vor 13 Stunden schrieb PVoss:
^Bauvorhaben: (?<ergebnis>.*)(?>B\d{2}-\d{5}|B\d{8})$

mit lookahead und lookbehind Groups spart man sich die capture Group für das gewünscht Ergebnis und bekommt nur ein einzelnes Match auf den gewünschten Teilstring.

Da wir ja schon Lösungen posten ...

(?<=Bauvorhaben: ).*(?=B\d{2}-\d{5}|B\d{8})

 

Geschrieben
vor 9 Stunden schrieb _n4p_:

Damit bekommt man aber zwei matches für group 0 und group 1? und in beiden steht auch "Bauvorhaben", was ja nicht im Ergebnis stehen sollte.

Den Teil habe ich überlesen, ist aber auch trivial zu ergänzen: (?:BAUVORHABEN\:)(.*)(?:B\d{2}-\d{5}). Und joa, du bekommst dann zwei Matches, unter anderem eben auch ein Subexpression Match mit dem gewünschten String. Lookbehind wird von std::regex in C++ zum Beispiel nicht supported, subexpression matches funktionieren auch Jahre zurück in so gut wie jeder regex engine.

  • 4 Wochen später...
Geschrieben

Hallo Leute,

sorry dass ich mich jetzt erst melde! Ich hatte leider einen familiären Zwischenfall der mich voll in Beschlag nahm.

Vielen Dank für eure Hilfe in dieser Sache!

Liebe Grüße

Christian

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...