Tutorial: Erste Schritte mit regulären Ausdrücken

Posted by on Jul 23, 2012 in News | No Comments

Reguläre Ausdrücke 
(regular expressions, RegExp, RegEx, Grep, …)

Viele Aufgaben eines/r Datenjournalist/in kann man mit „Suchen und Ersetzen“ lösen, z.B. in Microsoft Word.

Für komplexere „Suchen und Ersetzen“ gibt es die sogenannten „regulären Ausdrücke“. Diese werden von Microsoft Word leider nicht unterstützt, aber in vielen einfachen Texteditoren, wie z.B. in den kostenlosen OpenSource-Anwendungen TextWrangler für Mac oder Notepad++ für Windows.

Wie man mit „Suchen und Ersetzen“ einen Text bereinigen kann, werde ich nun an einem Beispiel demonstrieren. Dafür habe ich eine Liste gewählt, in der alle Leerzeichen fehlen. Diese Phänomen tritt in der Arbeit öfters auf, z.B. weil der Text mit einer OCR-Software (Bild-zu-Text-Erkennung) erstellt oder aus einem PDF-Dokument kopiert wurde. Hier ein Beispiel; die Liste der ehemaligen Bundespräsidenten der BRD kopiert von der entsprechenden Wikipedia Seite.

 TheodorHeuss(1884–1963)
 HeinrichLübke(1894–1972)
 GustavHeinemann(1899–1976)
 WalterScheel(*1919)
 KarlCarstens(1914–1992)
 RichardvonWeizsäcker(*1920)
 RomanHerzog(*1934)
 JohannesRau(1931–2006)
 HorstKöhler(*1943)
 ChristianWulff(*1959)
 JoachimGauck(*1940)

 

Als erstes kann man alle „(“ ersetzen durch ein Tab, dass von Excel als Spaltenwechsel interpretiert wird.

In Word: ersetze „(“ durch „^t“
Als regulärer Ausdruck: ersetze „(“ durch „t“

 TheodorHeuss            1884–1963)
 HeinrichLübke           1894–1972)
 GustavHeinemann         1899–1976)
 WalterScheel            *1919)
 KarlCarstens            1914–1992)
 RichardvonWeizsäcker    *1920)
 RomanHerzog             *1934)
 JohannesRau             1931–2006)
 HorstKöhler             *1943)
 ChristianWulff          *1959)
 JoachimGauck            *1940

 

Nun die schließenden Klammern entfernen.

In Word: ersetze „)“ durch „“
Als regulärer Ausdruck: ersetze „)“ durch „“

 TheodorHeuss            1884–1963
 HeinrichLübke           1894–1972
 GustavHeinemann         1899–1976
 WalterScheel            *1919
 KarlCarstens            1914–1992
 RichardvonWeizsäcker    *1920
 RomanHerzog             *1934
 JohannesRau             1931–2006
 HorstKöhler             *1943
 ChristianWulff          *1959
 JoachimGauck            *1940

 

Nun die Minuszeichen durch einen Tab ersetzen.

In Word: ersetze „-“ durch „^t“
Als regulärer Ausdruck: ersetze „-“ durch „t“

 TheodorHeuss            1884   1963
 HeinrichLübke           1894   1972
 GustavHeinemann         1899   1976
 WalterScheel            *1919
 KarlCarstens            1914   1992
 RichardvonWeizsäcker    *1920
 RomanHerzog             *1934
 JohannesRau             1931   2006
 HorstKöhler             *1943
 ChristianWulff          *1959
 JoachimGauck            *1940

 

Nun die Mal-Zeichen entfernen.

In Word: ersetze „*“ durch „“
Als regulärer Ausdruck: ersetze „*“ durch „“

 TheodorHeuss            1884   1963
 HeinrichLübke           1894   1972
 GustavHeinemann         1899   1976
 WalterScheel            1919
 KarlCarstens            1914   1992
 RichardvonWeizsäcker    1920
 RomanHerzog             1934
 JohannesRau             1931   2006
 HorstKöhler             1943
 ChristianWulff          1959
 JoachimGauck            1940

 

Die Daten sind nun schon sehr gut strukturiert, aber die Namen sind noch nicht korrekt. Vor- und Nachnamen „kleben“ noch aneinander. Man müsste nach jeden Kleinbuchstaben, auf den ein Großbuchstabe folgt, ein Leerzeichen setzen. Solch eine Aufgabe lässt sich nicht mehr mit einem einfachen „Suchen und Ersetzen“ lösen. Theoretisch müsste man jede Kombination von Klein- und Großbuchstaben suchen. Mit Microsoft Word kommt man hier nicht mehr weiter, aber mit regulären Ausdrücken.

Als regulärer Ausdruck: ersetze „([a-z])([A-Z])“ durch „1 2“

 Theodor Heuss           1884  1963
 Heinrich Lübke          1894  1972
 Gustav Heinemann        1899  1976
 Walter Scheel           1919
 Karl Carstens           1914  1992
 Richardvon Weizsäcker   1920
 Roman Herzog            1934
 Johannes Rau            1931  2006
 Horst Köhler            1943
 Christian Wulff         1959
 Joachim Gauck           1940

 

Durch den oben verwendeten regulären Ausdruck werden beliebige Kombinationen aus Klein- und Großbuchstaben gefunden:

    (

[a-z]

)    

    (

[A-Z]

)    

ein beliebiger
Kleinbuchstabe

ein beliebiger
Großbuchstabe

 1. Teil in Klammern

 2. Teil in Klammern

 

Wenn etwas gefunden wird, wird es ersetzt durch:

1

2

Was im 1. Teil in
Klammern gefunden wurde.

 Leerzeichen

   Was im 2. Teil in
Klammern gefunden wurde.

 

Reguläre Ausdrücke sind scheinbar kompliziert, aber auch hier ist alles eine Frage der Übung! Wenn man einmal damit anfängt, hat man schnell die ersten Erfolgserlebnisse und lernt dann kontinuierlich weitere Tricks dazu. Aber den ersten Schritt muss man erst einmal machen, und zwar einfach mal nach „Regulären Ausrücken“ googeln und sich die vielen Einführungskurse anschauen, etwa diesen hier.

Hier ein paar weitere Beispiele:

So findet man in einem Text automatisch Internet-Adressen aus Deutschland

http://

[a-z0-9-.]+

.de

http:\

    Beliebige Kombination aus Kleinbuchstaben,
Zahlen, Minuszeichen und Punkten

.de

 

So findet man in einem Text automatisch E-Mail-Adressen

[a-z0-9-.]+

       @       

[a-z0-9-.]+

Beliebige Kombination aus
Kleinbuchstaben, Zahlen,
Minuszeichen und Punkten

       @

Beliebige Kombination aus
Kleinbuchstaben, Zahlen,
Minuszeichen und Punkten

 

So findet man automatisch 4- und 5-stellige Zahlen, z.B. Postleitzahlen

s

[0-9]

{4,5}

s

 Leerzeichen

 eine beliebige Ziffer

… und zwar eine Kombination
aus mindestens 4 und maximal 5

 Leerzeichen

 

Dieser Text von Michael Kreil steht unter einer Creative Commons-Lizenz (CC BY 3.0 Michael Kreil)

[Siehe auch: Unser Tutorial zu Excel)