Suchen und Ersetzen mit regulären Ausdrücken

Reguläre Ausdrücke sind Muster, die bestimmte Zeichenkombinationen beschreiben. Damit können Sie Suchanfragen wie zum Beispiel "Finde alle Zellen, die mit '.gif', '.jpg' oder '.jpeg' enden" oder Ersetzungen wie zum Beispiel "Tausche in allen Zellen mit Preisen, die Reihenfolge von Zahl und Währung, z.B. '150,00 Euro' nach 'Euro 150,00'" definieren.

Markieren Sie im Dialog Suchen / Ersetzen die Option Mustervergleich

oder

verwenden Sie reguläre Ausdrücke in den eingebauten Funktionen Matches bzw. ReplaceMatch

Für die Beschreibung der regulären Ausdrücke werden folgende Sonderzeichen benötigt:

. [ ] ? + * ( ) { } \ | ! ^ -

Wenn Sie diese Zeichen in einer Suche mit regulären Ausdrücken benutzen möchten, müssen Sie ihnen jeweils den umgekehrten Schrägstrich \ (Backslash) als Maskierungszeichen voranstellen. Geben Sie zum Beispiel \[ an, wenn Sie eine öffnende eckige Klammer suchen.

Wenn die Option Mit Mustervergleich/Escape-Sequenzen deaktiviert ist, behandelt InfoZoom die regulären Ausdrücke wie normalen Text.

Zeichen und Zeichenklassen

Zeichen

Bedeutung

Beschreibung und Beispiel

.

Einzelnes Zeichen

Findet ein beliebiges einzelnes Zeichen.

K.gel findet zum Beispiel "Kugel" und "Kegel" nicht jedoch "Kuugel".

[ ]

[ - ]

Zeichenklasse

Findet alle innerhalb der eckigen Klammern angegebenen Zeichen. Bereiche können mit dem Bindestrich angeben werden.

[abc] findet "a", "b" und "c".

[a-z] findet einen Kleinbuchstaben.

[0-9A-Z] findet eine Ziffer und einen Großbuchstaben.

Bei der Angabe von Bereichen wird jeweils nur ein einzelnes Zeichen aus dem Bereich gefunden. Der Ausdruck <[a-z]> findet nur HTML-Elemente mit einem Buchstaben wie zum Beispiel "<b>" oder "<i>" nicht jedoch "<em>". Um "<em>" auch zu finden, können Wiederholungen benutzt werden: <[a-z]+> (siehe Wiederholungen).

Wenn die Zeichenklasse den Bindestrich oder das ^ Zeichen enthalten soll, müssen Sie diesen mit dem Backslash maskieren: Beispiel [\^\-a-z] findet einen Kleinbuchstaben, den Bindestrich und das ^ Zeichen.

[^ ]

[^ - ]

Negierte Zeichenklasse

Findet alle Zeichen, die nicht innerhalb der eckigen Klammern angegebenen sind. Bereiche können mit dem Bindestrich angegeben werden.

[^abc] findet alle Zeichen bis auf "a", "b" und "c".

[^a-z] findet ein Zeichen, das kein Kleinbuchstabe ist.

Der Bindestrich und das ^ Zeichen müssen maskiert werden (siehe Zeichenklasse).

Wiederholungen und Alternativen

Die folgenden Operatoren erlauben die Wiederholung des voranstehenden Suchausdrucks. Besteht der zu wiederholende Ausdruck aus mehreren Zeichen muss dieser in Klammern angegeben werden.

Es werden gierige und genügsame Wiederholungsoperatoren unterschieden. Die gierigen Operatoren ?, + und * ermitteln den längsten möglichen Suchtreffer, während ihre genügsamen Varianten ??, +? und *? den kürzest möglichen Suchtreffer ermitteln. Die Unterscheidung von gierigen und genügsamen Wiederholungsoperatoren ist vor allem beim Ersetzen wichtig.

Beispiel: Ein Attribut enthalte Text mit HTML-Auszeichnungen wie z.B. "<em>Text</em>". Die HTML-Auszeichnungen sollen entfernt werden, indem der Suchausdruck <.+> durch die leere Zeichenkette ersetzt wird (d.h. das "Ersetzen durch" Feld bleibt leer). Mit dem Ausdruck Suchausdruck <.+> wird jedoch zu viel ersetzt, weil der + Operator bis zum letzten > läuft. Um das gewünschte Ergebnis zu erhalten, muss der Suchausdruck <.+?> mit der genügsamen Variante des Wiederholungsoperators + verwendet werden.

Zeichen

Bedeutung

Beschreibung und Beispiel

?

Optional

Der voranstehende Suchausdruck ist optional.

Ran?d findet "Rand" und "Rad".

Seiten? findet "Seite" und "Seiten".

[0-9][0-9]? findet ein- und zweistellige ganze Zahlen.

+

Mindestens eine Wiederholung

Der voranstehende Suchausdruck tritt einmal oder mehrmals auf.

(Info)+Zoom findet zum Beispiel "InfoZoom" und "InfoInfoZoom" nicht jedoch "DataZoom" oder "Zoom".

*

Keine oder mehrere Wiederholungen

Der voranstehende Suchausdruck kann keinmal, einmal oder mehrmals auftreten.

(Info)*Zoom findet zum Beispiel "Zoom", "InfoZoom", "InfoInfoZoom" und "DataZoom".

??

+?

*?

Genügsame Wiederholungen

Genügsame Varianten der zugehörigen gierigen Wiederholungsoperatoren.

( )

Gruppierung

Gruppierung von Zeichen und Suchoperatoren.

|

Alternative

Oder-Verknüpfung zweier Suchausdrücke.

D|das findet "Das" und "das".

(Info)|(Data)Zoom findet "InfoZoom" und "DataZoom" nicht jedoch "AutoZoom".

(\.gif)|(\.jpe?g) mit der Option Am Ende der Zelle findet Dateinamen mit der Endung ".gif", ".jpg" und ".jpeg".

\n

Ersetzung

Rückgriff auf einen in geschweiften Klammern { } angegebenen Ausdruck. Dabei gibt n die Nummer des Ausdrucks beginnend bei 0 an.

<{.+?}>.*?</\0> findet Text, der in öffnende und schließende HTML-Auszeichner eingefasst ist. Also z.B. "<b>Text</b>", nicht jedoch "<b>Text</em>".

Negation

Zeichen

Bedeutung

Beschreibung und Beispiel

!

Negation

Negiert den folgenden Suchausdruck. Der negierte Suchausdruck muss am Ende des regulären Ausdrucks stehen.

a!b findet "a", wenn kein "b" folgt.

das!s findet "das Haus", nicht jedoch "es gilt, dass".

schu!macher ist nicht erlaubt.

schu!(macher) findet "Schuppan", nicht aber "Schumacher".

Abkürzungen

Für häufig benutzte Suchoperatoren können folgende Abkürzungen benutzt werden:

Abkürzung

Verwendung

\a

Ein alphanumerisches Zeichen (einschließlich Buchstaben mit diakritischen Zeichen, Ligaturen sowie "ß").

\b

Ein Leerzeichen oder ein Tabulatorzeichen. Entspricht: [ \t]

\c

Ein Buchstabe (bzw. Buchstabe mit diakritischem Zeichen oder "ß").

\d

Eine Ziffer. Entspricht: [0-9]

\h

Eine hexadezimale Ziffer. Entspricht: [0-9a-fA-F]

\i

Ein internationales Zeichen. Entspricht: [\u0250-\uffff]

\l

Ein Zeilenumbruch, d.h.: Zeilenvorschub, Wagenrücklauf oder eine Kombination aus diesen beiden Zeichen. Entspricht: (\r\n)|(\n\r)|\n|\r

\n

Zeichen für Zeilenvorschub. Entspricht: \u000A

\q

Eine Zeichenkette in einfachen oder doppelten Anführungszeichen.

Entspricht: (\"[^\"]*\")|\'[^\']*\')

\r

Zeichen für Wagenrücklauf. Entspricht: \u000D

\s

Ein Steuerzeichen. Entspricht: [\u0001-\u001f\u007f-\u009f]

\t

Ein Tabulatorzeichen. Entspricht: \u0009

\uxxxx

Beliebiges Unicode-Zeichen mit hexadezimalem Code xxxx, z.B. "\u0007" für den Bell-Character

\w

Ein Wort. Entspricht \c+

\z

Eine ganze Zahl. Entspricht: [0-9]+

Ersetzen mit regulären Ausdrücken

Die Verwendung der oben genannten Abkürzungen im Ersetzungsausdruck ("Ersetzen durch") ist nicht sinnvoll, da die Abkürzungen in der Regel einen Bereich von Zeichen spezifizieren.

Ausnahmen sind Abkürzungen, die ein konkretes Zeichen benennen. Solche Abkürzungen sind z.B. \r, \n, \t oder \uxxxx (wobei xxxx einer vierstelligen hexadezimalen Zahl entspricht). Die entsprechenden Escape-Sequenzen können auch im Ersetzungsausdruck verwendet werden.

Wenn Sie in den Ersetzungsausdruck einen Backslash einfügen wollen, dann müssen Sie diesen mit einem weiteren Backslash maskieren. Dies gilt zumindest, wenn auf den Backslash ein r, n, t oder u folgt. So stellen Sie sicher, dass der Backslash als solcher interpretiert wird und nicht als Bestandteil einer Escape-Sequenz.

Teile von Suchausdrücken können beim Ersetzen in beliebiger Reihenfolge wieder eingefügt werden. Dazu müssen die einzufügenden Teile im Suchausdruck in geschweiften Klammern angegeben werden. Beim Ersetzen wird mit \0, \1, \2, etc. auf die Teilausdrücke zurückgegriffen. Dabei können die Ziffern 0 bis maximal 9 verwendet werden.

Beispiel: Ein Attribut enthalte Beträge in der Form "Euro 9,99" und "DM 4,95". Mit dem Suchausdruck {\w} {\d+(,\d+)?} und dem Ersetzungsausdruck \1 \0 wird die Reihenfolge von Betrag und Währungsbezeichnung umgedreht. Das Ergebnis ist "9,99 Euro" und "4,95 DM".

Beispiele

Umordnen von Namen

Ein Attribut enthalte Namen von Personen in der Form "Vorname Nachname" die mit der Suchen und Ersetzen Funktion in die Form "Nachname, Vorname" gebracht werden sollen.

Suchausdruck:

{\w+} {\w+}

Ersetzungsausdruck:

\1, \0

Damit werden jedoch Personen mit zwei Vornamen nicht richtig behandelt. "Thomas Jakob Kuhn" wird zum Beispiel zu "Jakob, Thomas Kuhn". Mit folgendem Suchausdruck und Aktivierung der Option Am Ende einer Zeile wird das letzte Wort als Nachname behandelt.

Suchausdruck:

{(\w )+}{\w+}

Ersetzungsausdruck:

\1, \0

Einige Namen können jedoch einen Bindestrich enthalten, der mit \w nicht gefunden wird ("Hans-Peter Bauer" wird zu "Hans-Bauer, Peter". Daher wird der Suchausdruck um die Behandlung von zusammengesetzten Namen erweitert.

Suchausdruck:

{(\w(-\w)* )+}{(\w(-\w)*)+}

Ersetzungsausdruck:

\1, \0

Namen können auch in abgekürzter Form auftreten. Daher muss der Punkt (bzw. \.) mit in den Suchausdruck aufgenommen werden.

Suchausdruck:

{(\w\.?(-\w\.?)* )+}{(\w\.?(-\w\.?)*)+}

Ersetzungsausdruck:

\1, \0

Mit dem letzten Ausdruck werden auch Fälle wie "Hans P. Kuhl" und "H.-P. Kuhl" richtig behandelt.

Formatieren von Telefonnummern

Eine InfoZoom Tabelle enthalte Telefonnummern der Form "0049 / 0228 / 90 95 4-0", die in die Form "+49 (228) 90 95 4-0" gebracht werden sollen. Die Ermittlung des dafür nötigen regulären Ausdrucks wird im folgenden Schrittweise durchgeführt (Falls Sie dieses Beispiel mit InfoZoom nachvollziehen wollen, müssen Sie zwischen den einzelnen Schritten Rückgängig ausführen).

Der folgende Ausdruck ersetzt die beiden führenden Nullen der Länderkennung durch ein Pluszeichen:

Suchausdruck:

00{\z}{.*}

Ersetzungsausdruck:

+\0\1

Mit folgendem Suchausdruck wird zusätzlich die führende Null der Vorwahl verworfen und die Vorwahl in Klammern gesetzt.

Suchausdruck:

00{\z} / 0{\z}{.*}

Ersetzungsausdruck:

+\0 (\1) \2

Damit auch Telefonnummern, die keine oder überflüssige Leerzeichen enthalten (z.B. "0049/0228/90 95 4-0") korrekt ersetzt werden, sollte folgender Ausdruck verwendet werden.

Suchausdruck:

00{\z}\b*/\b*0{\z}\b*/{.*}

Ersetzungsausdruck:

+\0 (\1) \2

Siehe auch: