Reguläre Ausdrücke in Python



Ähnliche Dokumente
Reguläre Ausdrücke in Python. Python re Module. Prof. Dr. Rüdiger Weis. Sommersemester 2007

Reguläre Ausdrücke. Felix Döring, Felix Wittwer 14. November Python-Kurs

Funktionales Programmieren in Python

Funktionen in Python

Grundbegriffe der Informatik

Grundlagen der Programmierung Prof. H. Mössenböck. 3. Verzweigungen

Funktionen in Python

Luis Kornblueh. May 22, 2014

1 def Anweisung. 2 Argumentübergabe. 3 Lokale Variablen. 4 Default Argumente. 5 Aufruf mit Schlüsselwort. 6 Variable Argumente. Funktionen in Python

GREP. Reguläre Ausdrücke. GREP Hardcore. Syntax. Ersetzen Suchen. Look Around. 20. April 2012 Pubkon 2013

Eigene Formatvorlagen

NODELOCKED LIZENZ generieren (ab ST4)

Modul CTO Barcode für Windows Seite 1

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster

5 Zweisprachige Seiten

Zeichen bei Zahlen entschlüsseln

Erstellen der Barcode-Etiketten:

Werkzeuge der Informatik UNIX

teischl.com Software Design & Services e.u. office@teischl.com

ipin CSV-Datenimport (Mac OS X)

SelfLinux cron

Programmierkurs Java

Formale Sprachen. Anwendungen formaler Sprachen Adressen, Kaffeeautomaten, Programmiersprachen. Rudolf Freund, Marian Kogler

Angaben zu einem Kontakt...1 So können Sie einen Kontakt erfassen...4 Was Sie mit einem Kontakt tun können...7

SCHRITT 1: Öffnen des Bildes und Auswahl der Option»Drucken«im Menü»Datei«...2. SCHRITT 2: Angeben des Papierformat im Dialog»Drucklayout«...

Excel Funktionen durch eigene Funktionen erweitern.

Kurzanleitung. Toolbox. T_xls_Import

Informationen zur Verwendung von Visual Studio und cmake

10 Lesen und Schreiben von Dateien

Dokumentenverwaltung im Internet

Gussnummern-Lesesystem

Gemeinsamer Bibliotheksverbund: Übertragung von Datenexporten für den Verbundkatalog Öffentlicher Bibliotheken

Installationshinweise Linux Edubuntu 7.10 bei Verwendung des PC-Wächter

MdtTax Programm. Programm Dokumentation. Datenbank Schnittstelle. Das Hauptmenü. Die Bedienung des Programms geht über das Hauptmenü.

Anleitung zum LPI ATP Portal

4D Server v12 64-bit Version BETA VERSION

R ist freie Software und kann von der Website.

Waimea Phone Monitor. Handbuch. Anzeige von eingehenden Anrufen auf Telefonanlagen mit TAPI-Interface

Anleitung für die Teilnahme an den Platzvergaben "Studio II, Studio IV und Studio VI" im Studiengang Bachelor Architektur SS15

Zahlensysteme: Oktal- und Hexadezimalsystem

Lokale Installation von DotNetNuke 4 ohne IIS

Prüfung Computation, Programming

Andy s Hybrides Netzwerk

Tutorial -

AutoTexte und AutoKorrektur unter Outlook verwenden

Installation OMNIKEY 3121 USB

Kurzanweisung für Google Analytics

Installation von horizont 4 bei Verwendung mehrerer Datenbanken

Datenexport aus JS - Software

Ihr Ideen- & Projektmanagement-Tool

OutLook 2003 Konfiguration

Internet online Update (Mozilla Firefox)

Teil 2: Ablauf der Analyse festlegen

Theorie der Informatik

Grundbegriffe der Informatik

Arbeiten am Client. Achtung: Während der gesamten Vorbereitungsarbeiten darf das Programm MS Outlook auf keinen Fall geöffnet werden!

Tel.: Fax: Ein Text oder Programm in einem Editor schreiben und zu ClassPad übertragen.

Formale Sprachen. Der Unterschied zwischen Grammatiken und Sprachen. Rudolf Freund, Marian Kogler

MSDE 2000 mit Service Pack 3a

Artikel Schnittstelle über CSV

Erfahrungen mit Hartz IV- Empfängern

Etikettendruck mit Works 7.0

Java Einführung Operatoren Kapitel 2 und 3

P&P Software - Adressexport an Outlook 05/29/16 14:44:26

Der Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = Euro ergeben.

Professionelle Seminare im Bereich MS-Office

GVService - Der GerichtsVollzieherService. Anleitung für das Onlinebanking mit dem GVService

Das Modul ARTIKEL-BARCODE ermöglicht den Druck von Barcode-Etiketten der EAN-Codes 8 und 13.

Bedienungsanleitung: Onlineverifizierung von qualifiziert signierten PDF-Dateien

Inhaltverzeichnis 1 Einführung Zugang zu den Unifr Servern Zugang zu den Druckern Nützliche Links... 6

ftp://ftp.dlink.de/dpr/dpr-1061/documentation/dpr-1061%20printer%20compatible%20list.pdf

Anwendungsbeispiele Buchhaltung

Einführung in Python Übung 1

Grundbegriffe der Informatik

Access Grundlagen für Anwender. Andrea Weikert 1. Ausgabe, 1. Aktualisierung, Juli inkl. zusätzlichem Übungsanhang ACC2010-UA

BITte ein BIT. Vom Bit zum Binärsystem. A Bit Of Magic. 1. Welche Werte kann ein Bit annehmen? 2. Wie viele Zustände können Sie mit 2 Bit darstellen?

Browsereinstellungen für moneycheck24 in Explorer unter Windows

Patch Management mit

Handbucherweiterung Zuschlag

Wurzeln als Potenzen mit gebrochenen Exponenten. Vorkurs, Mathematik

Einrichten eines Postfachs mit Outlook Express / Outlook bis Version 2000

Das Handbuch zu KNetAttach. Orville Bennett Übersetzung: Thomas Bögel

Leitfaden Internet-Redaktion kursana.de

Zugriff auf die Modul-EEPROMs

Zinsrechner. Bedienungsanleitung

Schnelleinstieg. Datenimport für die EXPOSÉ - Familie. Import von Adress / Objektdaten aus MS Excel. = Datenintegration aus anderen Lösungen

Optimierung von Heizungsanlagen. Hydraulischer Abgleich Arbeitsweise der Software

Software- und Druckerzuweisung Selbstlernmaterialien

Sie finden im Folgenden drei Anleitungen, wie Sie sich mit dem Server der Schule verbinden können:

Verbinden. der Firma

L & G TECH Industriezerspanung

Backup der Progress Datenbank

Erstellen einer PostScript-Datei unter Windows XP

Workshop: Eigenes Image ohne VMware-Programme erstellen

Transkript:

Wintersemester 2009/2010

1 Metazeichen, Quantoren, Gruppierung 2 findall, finditer 3 sub, subn 4 split 5 Match Objects 6 greedy 7 Gruppen-Namen 8 Assertions

Reguläre Ausdrücke Reguläre Ausdrücke Reguläre Ausdrücke (engl. regular expression) beschreiben eine Familie von formalen Sprachen. Typ-3 Chomsky-Hierarchie Endliche Automaten Unix Shell, grep, emacs, vi, PERL, Python

Python re Module Python Library Reference 4.2 re Regular expression operations http://docs.python.org/lib/module-re.html A.M. Kuchling, Regular Expression HOWTO http://www.amk.ca/python/howto/regex/ Wikipedia-Artikel Reguläre Ausdrücke http://de.wikipedia.org/w/index.php?title=regul%c3%a4rer_ausdruck

Raw Strings r String Escapesequenzen werden nicht interpretiert. Reguläre Ausdrücke Verwenden sie grundsätzlich raw Strings, wenn sie mit regular expressions arbeiten.

compile compile compile(pattern[,flags]) cpat = re.compile(pat) result = cpat.match(str) ist äquivalent zu result = re.match(pat,str)

Flags I, L, U re.i re.ignorecase Nichtberücksichtigung von Gross- und Kleinschreibung. re.l re.locale Macht \w \W \b \B \s \S abhängig von der Lokalisierungseinstellung. re.u re.unicode Macht \w \W \b \B \d \D \s \S abhängig von der Unicode Charakter properties database.

Flags M, S re.m re.multiline ˆ erkennt am Beginn des Strings und von jeder Zeile. $ erkennt am Ende des Strings und von jeder Zeile. re.s re.dotall Der Punkt. erkennt alle Zeichen inklusive newline Zeichen (\n).

compile flag X re.x re.verbose Ermöglicht lesbarer Formatierung der RE # Kommentar bis zum Zeilen Ende Suchen nach # mittels [#] oder \# Whitespaces werden ignoriert Suchen von Leerzeichen mittels [ ] oder \

Beispiel VERBOSE ref = re.compile(r""" ( [1-9][0-9]*[^0-9] # Dezimal-Zahl 0[0-7]+[^0-7] # Oktal-Zahl x[0-9a-fa-f]+[^0-9a-fa-f] # Hexadezimal-Zahl ) """, re.verbose) ref = re.compile("([1-9][0-9]*[^0-9]" " 0[0-7]+[^0-7]" " x[0-9a-fa-f]+[^0-9a-fa-f])")

search search search(pattern, string[, flags]) p.search(string[,pos[,endpos]]) Innerhalb des String (beziehungsweise zwischen pos und (endpos-1)) werden 0 oder mehr Zeichen mit dem Regulären Ausdruck verglichen und ein MatchObject zurückgeliefert. Liefert None zurück, falls keine Übereinstimmung vorliegt.

match match match(pattern, string[, flags]) p.match(string[,pos[,endpos]]) Ab Beginn (beziehungsweise zwischen pos und (endpos-1)) des String werden 0 oder mehr Zeichen mit dem Regulären Ausdruck verglichen und ein MatchObject zurückgeliefert. Liefert None zurück, falls keine Übereinstimmung vorliegt.

Beispiel >>> import re >>> s="spam, eggs and spam." >>> m=re.match("spam",s) >>> print m <_sre.sre_match object at 0xb7df7f70> >>> print m.group() Spam >>> m=re.match("eggs",s) >>> print m None >>> m=re.search("eggs",s) >>> print m <_sre.sre_match object at 0xb7df7f70>

RegexObject >>> import re >>> p=re.compile("spam+") >>> p <_sre.sre_pattern object at 0xb7e2f4e0> >>> p.search("spam, spammmmm...") <_sre.sre_match object at 0xb7df1020> >>> p.search("spam, spammmmm...").group() spammmmm

Metazeichen Metazeichen.^$*+?{}[]\ ()

Auswahlbereiche \d: Alle Ziffern, [0-9] \D: Alles ausser Ziffern, [^0-9] \s: Whitespace, [ \t\n\r\f\v] \S: Alles ausser Whitespace, [^ \t\n\r\f\v] \w: Alphanumerische Zeichen, [a-za-z0-9] \W: Alles ausser alphanumerische Zeichen, [^a-za-z0-9] \b: Wortgenze \B: Alles ausser Wortgrenze : Oder Verknuepfung

Auswahl. beliebiges Zeichen [ Beginn einer Auswahl von Zeichen ]Ende einer Auswahl von Zeichen Oder-Verknüpfung Auswahl [ˆ Negation Auswahl \ Hebt Sonderbehandlung für das folgende Zeichen auf.

Beispiel [abcd] Matcht ein einzelne Zeichen a, b, c oder d [a-z] Matcht Kleinbuchstaben (ASCII) [a-za-z] Bereich: Matcht Gross- und Kleinbuchstaben (ASCII) [abc$ˆ] Matcht a, b, c oder $ oder ˆ. [ab\]cd] Matcht a, b, ], c, oder d

Beispiel: ˆ >>> import re >>> s="das Leben des Brian" >>> m=re.search( ^Das,s) # String Begin >>> m.group() Das >>> m=re.search( ^des,s) >>> m >>> print m None

Beispiel: $ >>> import re >>> s="das Leben des Brian" >>> m=re.search( Brian$,s) # String Ende >>> m.group() Brian >>> m=re.search( Bri$,s) >>> print m None

ˆ Zirkus >>> re.search( \^, ^ ).group() ^ >>> re.search( ^\^, ^ ).group() ^ >>> print re.search( ^\^, O^ ) None >>> re.search( ^\^, ^O ).group() ^ >>> print re.search( ^[^^], ^O ) None >>> re.search( ^[^^], X^X ).group() X >>> print re.search( ^[^^], ^ ) None

Quantoren * Wiederholung 0, 1 oder viele? Wiederholung 0 oder 1 + Wiederholung 1 oder viele { Beginn gezählter Wiederholung } Ende gezählter Wiederholung {m,n} Wiederholung mindestens m mal und maximal n mal

Gruppierung ( Beginn Gruppierung ) Ende Gruppierung ˆ Anfang String oder Zeile $ Ende String oder Zeile \A Matcht Begin des Strings auch im MULTILINE Mode

findall findall findall(pattern, string[, flags]) p.findall(string[, pos[, endpos]]) Keine Gruppe: Liste von allen nicht-überlappenden Musterübereinstimmungen. Eine Gruppe: Musterübereinstimmungen bezüglich Gruppe. Mehrere Gruppen: Liste mit Tupeln der Musterübereinstimmungen bezüglich der Gruppen.

Beispiel: findall >>> s="kreuz 6, Schippe 9, Herz 7, Karo 8" >> re.findall("\d",s) [ 6, 9, 7, 8 ] >>> re.findall("herz \d",s) [ Herz 7 ] >>> re.findall("her(z \d)",s) [ z 7 ] >>> re.findall("z \d",s) [ z 6, z 7 ] >>> re.findall("(z)( \d)",s) [( z, 6 ), ( z, 7 )]

finditer finditer finditer(pattern, string[, flags]) finditer(string[, pos[, endpos]]) Liefert einen Iterator von allen nicht-überlappenden Musterübereinstimmungen.

Beispiel: finditer >>> s="kreuz 6, Schippe 9, Herz 7, Karo 8" >>> mi=re.finditer("(\d)",s) >>> mi.next().group() 6 >>> mi.next().group() 9 >>> mi.next().group() 7 >>> mi.next().group() 8 >>> mi.next().group() Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration Prof. Dr. 8 Rüdiger Weis

Beispiel: finditer for Schleife >>> s="kreuz 6, Schippe 9, Herz 7, Karo 8" >>> mi=re.finditer("(\d)",s) >>> for hit in mi: print hit.group()... 6 9 7 8

sub sub sub(pattern,repl,string[,count]) p.sub(repl, string[, count = 0]) Liefert einen String mit Ersetzungen der nicht-überlappenden Musterübereinstimmungen mit dem repl String.

subn subn subn(repl,string[, count = 0]) p.subn(repl, string[, count = 0]) Führt sub() Ersetzung aus und liefert ein Tupel (new string, number of subs made).

Beispiel:sub, subn >>> s="windows mit MS Office. Windows ist installiert." >>> besser=re.sub("ms","open",s) >>> besser Windows mit Open Office. Windows ist installiert. >>> re.subn("windows","linux",besser) ( Linux mit Open Office. Linux ist installiert., 2)

split split split(pattern, string[, maxsplit = 0]) p.split(string[, maxsplit = 0]) Spaltet string mit dem pattern als Trennpunkte. Mit () eingeklammerte Gruppen im Pattern werden im resultierenden String mit zurückgeliefert. Falls maxsplit gesetzt wir, werden höchstend maxsplit Schnitte durchgeführt. Der restliche String wird als letzter String in der Liste zurückgeliefert.

Beispiel >>> s="die Gedanken sind frei" >>> re.split("\w+",s) [ Die, Gedanken, sind, frei ] >>> re.split("(\w+)",s) [ Die,, Gedanken,, sind, >>> re.split("\w+",s,2) [ Die, Gedanken, sind frei ], frei ]

escape escape escape(string) Liefert String zurück, in dem alle non-alphanumerischen Zeichen ge-backslashed werden. >>> re.escape(r"\section{}") \\\\section\\{\\} >>> re.escape("...$") \\.\\.\\.\\$

Match Objects match und search liefern ein MatchObject zurück. Methoden start end span group groups

start, end, span start([group]) Liefert Start der Muststerübereinstimmung. end([group]) Liefert Ende der Muststerübereinstimmung. span([group]) Liefert (m.start(group), m.end(group)

Beispiel: Match Object Methoden >>> s="spam, spam, eggs and spam." >>> m=re.search( spam,s) >>> m.start() 6 >>> m.end() 10 >>> m.span() (6, 10)

group group p.group([group1,...]) Liefert ein oder mehrere Untergruppen der Musterübereinstimmung. Defaultwert von group1 ist 0, was die gesamte Musterübereinstimmung liefert.

groups groups p.groups([default]) Liefert ein Tupel der Untergruppen der Musterübereinstimmung. Das default Argument wird benutzt für Gruppen die nicht bei Musterübereinstimmung berücksichtigt werden. Default in None.

Beispiel: Match Object Methoden >>> s="spam, spam, eggs and spam." >>> m=re.search( (spam),s) >>> m.groups() ( spam,) >>> m=re.search("(spam)(, )(eggs and spam)",s) >>> m.groups() ( spam,,, eggs and spam ) >>> m.span() (6, 25)

Gierig und Nicht-Gierig greedy und non-greedy *, +,?, {n,m} Gieriges Matchen So viel wie möglich *?, +?,??, {n,m}? Nicht-gieriges Matchen So wenig wie möglich.

Bsp: greedy und non-greedy >>> s="<title>technische Fachhochschule Berlin</title>" >>> m=re.search("<.*>",s) # Gierig >>> m.group() <title>technische Fachhochschule Berlin</title> >>> m=re.search("<.*?>",s) # Nicht-gierig >>> m.group() <title> >>> print re.search("<.*?>","1 <> 2").group() # Vorsicht * <>

Gruppen Nummern \1... \1... \1... Matcht den Inhalt der entsprechenden Gruppe. Zählung beginnt mit 1 raw String verwenden

Beispiel: \1... >>> import re >>> s= Breakfast: spam spam, spam eggs >>> pattern=re.compile(r (\w+) (\1) ) >>> matchobj=pattern.search(s) >>> matchobj.group() spam spam >>> satz="hund beisst Mann" >>> re.sub(r (\w+) (\w+) (\w+),r \3 \2 \1,satz) Mann beisst Hund

(?P<name>) und (?P=name) Gruppen-Namen (?P<name>...) (?P<name>...) Zuweisung von Gruppen-Namen (?P=name) (?P=name) Ansprechen von Gruppen-Namen

groupdict groupdict p.groupdict([default]) Liefert Dictonary aller benannten Untergruppen mit dem Gruppen-Namen als Schlüssel. Das default Argument wird benutzt für Gruppen, welche nicht bei Musterübereinstimmung berücksichtigt werden. Default in None.

Beispiel: Gruppen-Namen >>> import re >>> s="http://www.bht-berlin.de/index.html" >>> pat=re.compile("(?p<protokol>\w+)\w+(?p<adresse>[\w.-]+)\w") >>> pat.search(s).groupdict() { Protokol : http, Adresse : www.bht-berlin.de } >>> pat.search(s).groups() ( http, www.bht-berlin.de ) >>> pat.search(s).group() http://www.bht-berlin.de/ >>> pat.search(s).group(1) #!Achtung! http >>> pat.search(s).group("protokol") http >>> pat.search(s).group(2) www.bht-berlin.de

(?=...) Positive lookahead assertion (?=...) Positive lookahead assertion (?=...) Sucht Übereinstimmung mit dem folgenden String Verbraucht keine Zeichen (zero-width assertion)

(?!...) Negative lookahead assertion (?!...) Negative lookahead assertion (?!...) Liefert Übereinstimmung falls folgender String nicht übereinstimmt. Verbraucht keine Zeichen (zero-width assertion)

Beispiel: Nicht.txt enden Alle Dateien, welche nicht auf.txt enden.*[.]([^t].?.?.[^x]?.?..?[^t]?)$ oder.*[.](?!txt$).*$

(?<=...) Positive lookbehind assertion (?<=...) Positive lookbehind assertion (?<=...) Sucht Übereinstimmung mit dem vorangehenden String Verbraucht keine Zeichen (zero-width assertion)

(?<!...) Negative lookbehind assertion (?<!...) Negative lookahead assertion (?<!...) Liefert Übereinstimmung falls vorausgehender String nicht übereinstimmt. Verbraucht keine Zeichen (zero-width assertion)

Beispiel: lookbehind assertion >>> import re >>> s= spam eggs, spam spam, python eggs >>> m=re.search("(?<=python) eggs",s) >>> m.span() (28, 33) >>> m=re.search("(?<!python) eggs",s) >>> m.span() (4, 9)

(?(id/name)yes-pattern no-pattern) (?(id/name)yes-pattern no-pattern) Falls die id/name Gruppe existiert, versuche gegen das yes-pattern zu matchen sonst gegen das no-pattern. no-pattern ist optional

Beispiel (?(id/name)yes-pattern no-pattern) >>> import re >>> muster="(<)?(\w+@([\w-])+\.\w+)(?(1)>)" >>> print re.match(muster,"<rweis@bht-berlin.de>").group() <rweis@bht-berlin.de> >>> print re.match(muster,"rweis@bht-berlin.de").group() rweis@bht-berlin.de >>> print re.match(muster,"<rweis@bht-berlin.de") None

c opyleft c opyleft Erstellt mit Freier Software c Rüdiger Weis, Berlin 2005-9 unter der GNU Free Documentation License.