1.3
 Regex in Python

1.3.1
 Suchen

Funktion re.search(): Suchen mit reguläre Ausdrücken 
Matches und Gruppen extrahieren  7

 
import re 
 
text = my email is simon.clematide@cl.uzh.ch and yours? 
pattern = r([\w.]+)@([\w.]+) 
m = re.search(pattern, text) 
 
# get whole match 
print "Whole match:", m.group() 
 
# get the first matched group 
print "First group:", m.group(1) 
 
# get the second matched group 
print "Second group:", m.group(2)

Funktion re.findall(): Globale Suche 
Alle nicht-überlappenden Matches extrahieren  8

 
import re 
 
text = u"Viele Köche verderben den Brei." 
pattern = ur"(\w+)" 
 
# Alle Matches finden 
m = re.findall(pattern, text) 
 
for g in m: 
   print g
Achtung: Pattern und Text müssen immer vom gleichen String-Typ sein!

Unicode Flag: Was ist ein Wortzeichen? 
Unicode-Kategorien aktivieren  9

 
import re 
 
text = u"Viele Köche verderben den Brei." 
pattern = ur"(\w+)" 
 
# Das Flag (?u) aktiviert Unicode-Kategorien fuer \w und \b 
pattern = ur"(?u)(\w+)" 
 
# Resultat ist eine Liste 
m = re.findall(pattern, text) 
 
for s in m: 
   print s
Achtung: Das Unicode-Flag (?u) zählt nicht als Gruppe.

Tokenisierer 
Lesbare und kommentierbare Ausdrücke dank Flag (?x)  10

 
import re 
text = "That U.S.A. poster-print costs $12.40..." 
pattern = r(?x)   # set flag (?x) to allow verbose regexps 
   (?:[A-Z]\.)+    # abbreviations, e.g. U.S.A. 
  | \w+(?:-\w+)*    # words with optional internal hyphens 
  | \$?\d+[.\d]*%?  # currency and percentages, $12.40, 82% 
  | \.\.\.         # ellipsis 
  | [.,;?]+        # interpunctuation 
  | \S+           # catch-all for non-layout characters 
   
m = re.findall(pattern,text) 
print m
Kauderwelsch-Alternative ohne Flag x:
(?:[A-Z]\.)+|\w+(?:-\w+)*|\$?\d+[.\d]*%?|\.\.\.|[.,;?]+|\S+

1.3.2
 Ersetzen

Funktion re.sub(): Ersetzen mit regulären Ausdrücken 
Globales Ersetzen mit Rückreferenz  11

 
import re 
 
text = u"Hässliche Köche verdürben das Gebräu" 
 
pattern = ur"([aeioöü]+)" 
 
# Im Ersetzungstext können gematchte Gruppen eingefügt werden. 
# \N (N ist die N-te gruppierende Klammer im Pattern) 
replacement = ur"[\1]" 
 
print re.sub(pattern, replacement, text)
Achtung: replacement ist eine Zeichenkette, kein regulärer Ausdruck!