regex

Sonstiges (nicht kategorisierbar)

Moderator: Moderatoren

Antworten
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

regex

Beitrag von Rudolf »

Hallo,
habe für die optimierung der Texterkennung in meinem DPP System vom Kunden einen regex Ausdruck erhalten. Kann aber aus "speziellen" Gründen nicht Rückfragen was er genau damit meint. Vielleicht gibt es hier jemanden der mir helfen kann:

^(([1-9][0-9]{0,3})|([A-Z].*$)|([(][1-9][0-9]{0,3}[)]))$

ich habe es aufgelöst in Gruppen zur besseren Übersicht:

gruppe1=[1-9][0-9]{0,3}
gruppe2=[A-Z].*$
gruppe3=[(][1-9][0-9]{0,3}[)]
final=^({gruppe1}|{gruppe2}|{gruppe3})$
{final}

Mir ist aber Gruppe2 nicht ganz klar. Wieso ".*$" ? Das bedeutet ein Zeichen, dann keines oder beliebig viele, wozu das $ am Schluss einer Gruppe ?

Grüße
Rudolf
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: regex

Beitrag von georg »

Hallo, Rudolf -


regular expressions sind immer "greedy", d.h. sie versuchen den längsten, möglichen Match zu liefern.

Beispiel?

Code: Alles auswählen

"Heute ist ein Tag, an dem man denkt, der sollte nie zu Ende gehen."
Diese regular expression:

Code: Alles auswählen

t(.+),
liefert

Code: Alles auswählen

e ist ein Tag, an dem man denkt
Das Ergebnis beginnt mit dem ersten gefundenen "t" und endet mit dem letzten gefundenen ",".

Ändert man die regular expression auf

Code: Alles auswählen

t(.+?),
ab, erhält man folgendes Ergebnis:

Code: Alles auswählen

e ist ein Tag
d.h. der Match wird so kurz wie möglich gehalten und endet damit bereits am ersten Komma.

Die Aufgabe eines ? ist also, einen möglichst kurzen Match zu erhalten.

Ansonsten gibt es in der Wissenbasis einen Aufsatz von mir zu regular expressions, sowie den Quellcode für meine RegExpBench, mit der man regular expressions ausprobieren kann: http://www.xbaseforum.de/viewtopic.php? ... egexpbench

Genaueres zu regular expressions findest Du unter de.selfhtml.org
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: regex

Beitrag von Rudolf »

Hallo Georg,
danke, hab auch unter regenechsen eine einfache Beschreibung gefunden, aber ich glaube ich muss mir einfach viele Beispiele ansehen damit ich alles verstehe.
Grüße
Rudolf
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: regex

Beitrag von georg »

Hallo, Rudolf -


lade Dir meine RegExpBench runter, damit wird das Experimentieren deutlich einfacher. (Darum habe ich mir so ein Programm auch geschrieben.)
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: regex

Beitrag von Rudolf »

Hallo Georg,
danke, versuche gerade zu compilieren ;-) ist sicher sehr hilfreich
Grüße
Rudolf
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: regex

Beitrag von Rudolf »

Hallo, wo bekomme ich für die Regexpbench zum complieren die xbpcre.ch her ?
Grüße
Rudolf
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: regex

Beitrag von brandelh »

die war von Phil, ich meine in seiner LoadFromUrl() auch enthalten (was ich aber entfernt habe).
Ich habe sie bei Pablo gefunden (Version 1.20):
Dateianhänge
xbpcre.zip
(300.11 KiB) 232-mal heruntergeladen
XbPCRE.pdf
(17.96 KiB) 198-mal heruntergeladen
Gruß
Hubert
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: regex

Beitrag von Rudolf »

Hallo Hubert,
danke !
Grüße
Rudolf
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: regex

Beitrag von Rudolf »

Hallo,
irgendwie komme ich nicht weiter, habe jetzt meinen Ausdruck eingegeben, bekomme als Ergebnis ein paar Zahlen, aber die sagen mir nicht viel. Ich brauche es zur Optimierung der Schrifterkennung, ich denke ich kann "result from executing" dazu verwenden. Wenn 0, denke ich wurde nichts gefunden. Was bedeutet dann result = 23 ? und wieso ist length of pattern 54 ?
Grüße
Rudolf
Dateianhänge
2015-04-30_12h08_53.jpg
2015-04-30_12h08_53.jpg (44.69 KiB) 8444 mal betrachtet
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: regex

Beitrag von georg »

Hallo, Rudolf -


regular expressions geben nicht wie at() eine Position zurück, sondern die Matches, die gefunden werden. Jeder Match kann dann über oReg:result(nI) abgerufen werden. Die Methode gibt ein Array zurück, das Beginn und Länge des Match definiert.

In dem von Dir geposteten Beispiel hat RegExp() drei Matches gefunden ("result from executing RegExp"). RegExpBench nimmt standardmässig den ersten Match (wenn überhaupt einer vorhanden ist) und zeigt diesen an. In diesem Fall ist das von Stelle 2 ("starting point") in der Länge 2 ("length"). Das wird als "result" angezeigt. Wenn Du den Spinbutton "result form RegExp:Exec()" betätigst, werden die anderen Matches angezeigt.

In Deinem Screenshot hast Du übrigens das "$" weggelassen und bekommst daher "nur" 3 Matches, mit "$" sind es 4.

Jede Gruppe, die in dem Muster vorhanden ist, ergibt - wenn sie gefunden wird - einen Treffer.

Wenn es nicht sehr vertrauliche Daten sind, wäre ein Beispiel mit Originaldaten hilfreich.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: regex

Beitrag von Rudolf »

Hallo Georg,
vielen Danke ! das erklärt schon einiges. Ich kann die MyScript Schrifterkennung angeblich serverseitig mit den regex Ausdrücken optimieren. Nur ist der Syntax anscheinend eingeschränkt und wenn nichts gefunden wird, bleibt das Ergebnis der Schrifterkennung leer, was meiner Meinung nach falsch ist. Muss also hier noch ein paar Dinge mit MyScript klären. Mir wäre es sowieso lieber wenn ich die Prüfung des Ergebnisses der Schrifterkennung in meiner Software selbst machen könnte, habe dann mehr Kontrolle. Dabei könnte die regex workbench sehr behilflich sein, nur muss ich eben dann die Interpretation besser verstehen.
Grüße
Rudolf
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: regex

Beitrag von georg »

Hallo, Rudolf -


wenn nicht schon geschehen, würde ich den oben verlinkten Thread mal durchlesen. Das sind so - im Schnelldurchgang - die wichtigsten Dinge für uns Xbase-Programmierer.

Und wenn man sich mit den regular expressions mal angefreundet hat, dann sind sie sehr hilfreich.

Wenn Du Fragen hast, beantworte ich sie gerne.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
Herbert
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1991
Registriert: Do, 14. Aug 2008 0:22
Wohnort: Gmunden am Traunsee, Österreich
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: regex

Beitrag von Herbert »

Sehr interessant. Danke für die Anregung.
Weiter möchte ich darauf hinweisen, dass mit der Levenstein-Distanz aus ungenauen Umwandlungen das passende gefunden werden kann. Ich habe damit verblüffende Verbesserungen bei der Analyse der OCR-Erkennung erhalten.
http://de.wikipedia.org/wiki/Levenshtein-Distanz
Grüsse Herbert
Immer in Bewegung...
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: regex

Beitrag von Rudolf »

Hallo Herbert,
dazu habe ich sogar Xbase++ Code, weiss aber nicht mehr woher, nur dass der Author Neuss heisst, sind nur ein paar Zeilen in xBase++. Damit mache ich Vorschläge für die Korrektur der Formualre auf Grund eines Lexikons.
Grüße
Rudolf
Antworten