Open Source Dokumentenmanagement
Dokumentation

Durchsuchbare Dokumentation aufrufen | Zurück zur Dokumentationsübersicht

Navigation: Dokumentationen agorum core > agorum core docform


Regular Expressions

Ein regulärer Ausdruck (Abkürzung RegExp) ist in der theoretischen Informatik eine Zeichenkette, die der Beschreibung von Mengen von Zeichenketten mit Hilfe bestimmter syntaktischer Regeln dient. 

Einfache Erklärung des RegEx


Ein Regulärer Ausdruck (engl. regular expression, Abk. RegExp oder Regex) ist eine Art überfassende Beschreibung für Wörter. Wir übergeben dem PV eine Art Muster wieder, anhand dessen das System Wörter erkennt. Ähnlich, wie wir einem Kind Fahrzeuge beschreiben:

Wir geben zu, es sind nicht die schönsten Kindererklärungen, aber Sie verstehen bestimmt was wir meinen. Ähnlich ist es bei einem Rechner. Wir können diesem Beibrigen bestimmte Wort-Muster zu erkennen, dazu nutzen wir Regex. Diese fällt wesentlich kürzer aus, aber hilft dem System Wörter voneinander zu unterscheiden. Hierzu ein kleines Beispiel:

Uns liegen folgende Begriffe vor, diese werden wir anhand von regex-Audsdrücken beschreiben und dem System dadurch beibringen verschiedene Muster zu erkennen:

Haus
haus
Hund
Maus
Fund
und

Geben wir nun den Regexausdruck ...

Haus

an, wird das System das Wort Haus finden und nicht haus, da die Groß- und Kleinschreibung zählt. Wollen wir stattdessen alle Wörter uns ausgeben lassen, die aus 4 Buchstaben bestehen, nutzen wir diesen Ausdruck:

[a-zA-Z]{4}

Das System weiß nun, dass es nach vier ({4}) groß- und kleingeschriebenen Buchstaben ([a-zA-Z]) Ausschau hält. Es werden somit die Wörter Haus, haus, Hund, Maus und Fund gefunden.

Suchen wir nach Wörtern, die mit einem und enden, nutzen wir:

.?und

Das System hält nun nach drei oder vier Buchstaben langen Wörtern Ausschau, die mit und enden. Durch .? erlauben, wir ein oder kein beliebiges Zeichen. Das System findet somit Hund, Fund und und.

Es gibt so viele weitere regex-Möglichkeiten und Spielereien, wie wir Menschen einem System beibringen können, bestimmte Wort-Muster zu akzeptieren. Hier hilft es nur ins kalte Wasser zu springen und verschiedene Regex Ausdrücke mal auszuprobieren.

Unterstützten können Sie dabei die unterschiedlichsten Webseiten, googeln Sie z.B. nach "regex online" oder "regular expression online". Gerne von uns genutzt wird z.B. https://regex101.com/, diese ist allerdings auf Englisch.

RegEx in agorum core


RegEx-Ausdrücke finden in den unterschiedlichsten agorum core Bereichen Verwendung. Beispielsweise in ...

Meist genutzte RegEx Ausdrücke


Reservierte Zeichen (Funktionszeichen) müssen mit \ maskiert werden

agorum\.com   **der . wird maskiert (Der Punkt ist ein reserviertes Zeichen)**

! Mit dem vorangestellten ! (Ausrufezeichen) wird der Ausdruck negiert

!.*agorum.*   **findet alle Zeichenketten OHNE agorum**

. Platzhalter für ein beliebiges Zeichen

a.c           **findet abc und ajc und axc.....**
.*            **findet alles - beliebiges Zeichen (.) beliebig oft (*) **

+ Das vorhergehende Zeichen kann 1 bis n-mal vorkommen - entspricht {1, }

a+            **findet a und unter anderem auch aaaaa....**
.+            **findet mindestens ein Zeichen oder mehr **

* Das vorhergehende Zeichen kann 0 bis n-mal vorkommen - entspricht {0,}

a*            **findet a und aaaaa und aaa **

? Das vorhergehende Zeichen ist beliebig (und darf auch fehlen)  - entspricht {0,1}

ab?          **findet ab und abc und auch abz**

^ Gibt an, dass der Ausdruck am Anfang des Satzes stehen muss

^AZ           **bedeutet, dass der Ausdruck mit AZ beginnen muss**

$ Gibt an, dass der Ausdruck am Ende des Satzes stehen muss

AZ$           **bedeutet, dass der Ausdruck mit AZ enden muss**

| Entweder ODER eines Begriffes

agorum\.(de|com)   **entweder agorum.de ODER agorum.com**

( ) Fasst mehrere Zeichen zusammen

(de|com)

[ ] Gibt einen Bereich an

[a-c]gorum          **findet agorum und bgorum und cgorum**

{ } Gibt an, wie oft ein Zeichen wiederholt werden darf

h.{2}s              **findet haas und hzzs und haus und auch hans**

Alle E-Mails, die mit Absender agorum.com verschickt wurden; Anwenden auf: Absender-Adresse

.*agorum\.com.*

Alle E-Mails, die mit Absender agorum.com oder agorum.de verschickt wurden; Anwenden auf: Absender-Adresse

.*agorum\.(com|de).*

Alle E-Mails, die NICHT agorum im Absender enthalten; Anwenden auf: Absender-Adresse

!.*agorum.*

DocForm - Regular expression (RegExp) - Beispiele


Regular Expression können in DocForm für zwei Aufgaben eingesetzt werden:

  1. Mustererkennung
  2. Werte auslesen

Mustererkennung

Aus einer Zeichenkette nur den vorderen Teil auslesen

In diesem Beispiel geht es um variable Texte. Beispielsweise bei Versicherungen liegt uns im Dokument immer der Name und ein Unfalldatum in einer Zeile vor, wie:

Der Name ist immer unterschiedlich aufgebaut, aber das Wort 'Unfalldatum' liegt immer vor. Wir können also dank RegExp mitteilen, dass uns alles bis zum Wort Unfalldatum ausgegeben wird:

^(.*?)\s*Unfalldatum

 

Beispiel Aktenzeichen

Ein Aktenzeichen ist immer nach dem folgenden Muster aufgebaut:

2 Buchstaben /3 Zahlen - 4 Zahlen.  Beispiel RL/162-0332

Die RegExp kann dann so aussehen:

[a-zA-Z][a-zA-Z]\/\d\d\d\-\d\d\d\d

 

Beispiel Positionsanker - Dezimalzahl 4 Nachkommastellen und Dezimalzahl 2 Nachkommastellen

Eine regEx für das Format: 23,3333 3698,35

/[+-]?[,\.\d]*\d[,\.]\d{4}\s+?[,\.\d]*\d[,\.]\d{2}(?!\d)/

 

Beispiel Positionsanker - Dezimalzahlen und EUR/€ Zeichen

Eine regEx für das Format: 23,32€ 3698,35€

/[+-]?[,\.\d]*\d[,\.]\d{2}\s?[€]\s+?[,\.\d]*\d[,\.]\d{2}(?!\d)\s?[€]/

Wurde der EUR ausgeschrieben, wie in folgendem Format:  23,32 EUR 3698,35 EUR, passt folgender regEx-Ausdruck:

/[+-]?[,\.\d]*\d[,\.]\d{2}\s?EUR\s+?[,\.\d]*\d[,\.]\d{2}(?!\d)\s?EUR/

Wird das EUR-Zeichen nur einmal verwendet (Beispiel: 75,00 EUR 1.350,00), können Sie folgenden Befehl nutzen:

/[+-]?[,\.\d]*\d[,\.]\d{2}\s?EUR\s+?[,\.\d]*\d[,\.]\d{2}(?!\d)\s?/

 

​​​​Beispiel Ganzzahl, die ein oder zwei stellig sein kann

Format:

/^\d{1,2}$/

 

Beispiel für eine Ganzzahl, wenn der mitgelieferte Extraktor nicht funktioniert

Normalerweise können Sie als Extraktor eine Ganzzahl auswählen, manchmal markiert diese aber auch Text. Trifft dies auf Sie zu, ändern Sie den Wert um zu:

/\b\d+\b/

Werte auslesen

Beispiel Barcode

In einem Barcode steht folgender Wert: $1223212344$2.0$A1621-21388$

Der erste $ Wert soll eine Teilenummer, der zweite Wert die Version des Teiles und der dritte Wert die Zeichnung sein, wobei der Wert vor dem Bindestrich die Zeichnungsgruppe darstellt, der Wert danach - die Zeichnungsnummer.

Somit können 5 Informationen ausgelesen werden:

  1. Teilenummer
  2. Version
  3. Zeichnung
  4. Zeichnungsgruppe
  5. Zeichnungsnummer

Hier die RegExp zum Auslesen:

Teilenummer

^\$(.*?)\$.*\$.*\$$

Version

^\$.*\$(.*?)\$.*\$$

Zeichnung

^\$.*\$.*\$(.*?)\$$

Zeichnungsgruppe

^\$.*\$.*\$(.*?)\-.*\$$

Zeichnungsnummer

^\$.*\$.*\$.*\-(.*?)\$$

JavaScript Beispiel zum Auslesen von Mustern per RegEx


Hier ein kleines Script, das aus einem String ein Muster erkennt und ausliest:

/* global sc */ 

let objects = require('common/objects');
let beans = require('common/beans');

let str = 'fd kjdfkj gdf #vgnr123456x] okidfjgdfk';

let ret = str.match(/#vgnr([0-9]{1,10})x/);

ret;

 

Das Ergebnis sieht dann hier so aus:

{
  "0": "#vgnr123456x",
  "1": "123456",
  "input": "fd kjdfkj gdf #vgnr123456x] okidfjgdfk",
  "index": 14
}

Also in ret[1] steht dann z.B. der Wert der Nummer, die hier interessiert.