![]() |
||
| Python |
Material
Installation
Dokumentation
PythonKara
Grundlagen
Namensräume
Funktionen
Testen
Strings
Dictionary
Listen
Zeitmessungen
Zufall
Bits+Bytes
Module
Sockets
xml
serielle Schnittstelle
Python in HTML
Turtle
xturtle
Tkinter
OOP
Threads
Zusicherungen
exe
Patterns
GnuPlot
Goto
MySQL
CGI
Dateien
Exceptions
Grafik
Mathematik
Fischertechnik
Unicode
funktional
Iterator
Sound
C
Debugger
Pfade
Docstrings
Django
Bluetooth
format
Bytecode
signal
|
|
|
reguläre Ausdrücke |
>>> s = 'Ali Baba und die vierzig Räuber'
>>> i = re.finditer(r'[bB]\w',s)
>>> m = next(i)
>>> m.group()
'Ba'
>>> m.start()
4
>>> m.end()
6
>>> m = next(i)
>>> m.group()
'ba'
>>> m.start()
6
>>> m.end()
8
>>> m = next(i)
>>> m.group()
'be'
>>> m.start()
28
>>> m.end()
30
>>> m = next(i)
Traceback (most recent call last):
File "<pyshell#27>", line 1, in <module>
m = next(i)
StopIteration
Durch runde Klammern kann man einen regulären Ausdruck in Gruppen aufteilen.
>>> s = 'Ali Baba und die vierzig Räuber' >>> i = re.finditer(r'([bB])(\w)',s) >>> m = next(i) >>> m.group(0) 'Ba' >>> m.group(1) 'B' >>> m.group(2) 'a' >>> m.group(3) Traceback (most recent call last): File "<pyshell#37>", line 1, in <module> m.group(3) IndexError: no such group
Nehmen wir an, wir suchen ein Binärmuster, das dem regulären Ausdruck ⟨1{1,3}|10|01{0,3}⟩ (andere Schreibweisen: ⸢1{1,3}|10|01{0,3}⸥ (Jeffrey Friedl) oder einfach 1{1,3}|10|01{0,3} (ohne Klammer, wenn kein Missverständnis zu befürchten ist ) entspricht.
>>> re.findall(r'1{1,3}|10|01{0,3}','1111')
['111', '1']
>>> re.findall(r'1{1,3}|10|01{0,3}','10')
['1', '0']
Im ersten Beispiel wird der nicht zu akzeptierende String in zwei akzeptierte zerlegt. Im zweiten Beispiel wird '1' und '0' gefunden, nicht aber '10'. Sorgt man dafür, dass der Anfang des Strings auch der Anfang des gefundenen Strings ist und das Ende des Strings das Ende des gefundenen Strings, so wird versucht, den ganzen String zu 'matchen'.
>>> re.findall(r'\A(1{1,3}|10|01{0,3})\Z','10') ['10'] >>> re.findall(r'\A(1{1,3}|10|01{0,3})\Z','1111') []
import re
def test(r,s):
"""
gibt genau dann wahr zurueck, wenn der String s dem regulaeren
Ausdruck r entspricht
"""
ro = re.compile('\A('+r+')\Z')
return ro.search(s) != None
Tests
>>> test(r'(1{1,3}|10|01{0,3})','1111')
False
>>> test(r'(1{1,3}|10|01{0,3})','111')
True
>>> test(r'(1{1,3}|10|01{0,3})','0111')
True
>>> test(r'(1{1,3}|10|01{0,3})','01110')
False
>>>