Alle Dateien aus dem Pythonkurs
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

102 lines
2.9 KiB

import re
import unittest
import logging
pattern_char_only = re.compile('^[A-Z][a-z]+$')
pattern_digits_only = re.compile(r'\d+')
pattern_no_digits = re.compile(r'\D+')
pattern_plz = re.compile('^[0-9]{5}$')
pattern_plz2 = re.compile('^\d{5}$')
pattern_quote= re.compile(':')
pattern_tab = re.compile(r'\t')
pattern_simpson = re.compile('Simpson')
pattern_simple = re.compile('O*')
logging.basicConfig( format='%(asctime)-15s [%(levelname)s] %(funcName)s: %(message)s', level=logging.DEBUG)
# Unittest für die Demonstration von regular expressions (re)
class TestRegEgEx(unittest.TestCase):
# match: Passt der String auf die re
def test_match(self):
m = pattern_char_only.match('Olli')
logging.debug(f'm={m}')
self.assertTrue(m.span()[1] >0)
# Sucht alle Vorkommnisse der re im String
def test_findall(self):
s = '5 Äpfel, 10 Bananen, 42 Erdbeeren'
logging.debug(f' nur Ziffern: {pattern_digits_only.findall(s)}')
logging.debug(f' keine Ziffern: {pattern_no_digits.findall(s)}')
m = pattern_char_only.findall('Olli')
logging.debug(f'm={m}')
self.assertIsNotNone(m)
# Prüft die Gültigkeit einer Postleitzahl ('^\d{5}$' genau 5 Ziffern)
def test_plz(self):
patterns = [pattern_plz,pattern_plz2]
plz = ['42275','5600']
for pattern in patterns:
m = pattern.findall(plz[0])
logging.debug(f'm={m}')
self.assertNotEqual('',m[0])
m = pattern.findall(plz[1])
logging.debug(f'm={m}')
self.assertEqual([],m)
# Test für Suche
def test_search(self):
m = pattern_char_only.search('Olli')
logging.debug(f'm={m}')
#String passt auf die regular expression
self.assertIsNotNone(m)
m = pattern_char_only.search('123456')
logging.debug(f'm={m}')
#Dieser String passt nicht.
self.assertIsNone(m)
# Test zum Splitting (der Satz wird am ':' in die Worte zerlegt)
def test_split(self):
m = pattern_quote.split(' Die:Würde:des:Menschen:ist:unantastbar.')
logging.debug(f'm={m}')
self.assertIsNotNone(m)
#Die einzelnen Worte ausgeben
for word in m:
logging.debug(f' Wort: {word}')
# Test für Ersetzung (substitution von Tab mit Space)
def test_sub(self):
m = pattern_tab.sub(' ','Satz\tmit\tTabulator.')
logging.debug(f'm={m}')
# Test für einfache regular Expression ('O*')
def test_simple_re(self):
m = pattern_simple.search('Olli')
logging.debug(f'm={m.span()}')
self.assertTrue(m.end() > 0)
m = pattern_simple.search('Luana')
logging.debug(f'm={m.span()}')
self.assertFalse(m.end() >0)
# Test für den Iterator ('*Simpson')
def test_finditer(self):
m = pattern_simpson.finditer('Homer Simpson, Marge Simpson, Bart Simpson, Lisa Simpson, Maggie Simpson')
logging.debug(f'm={m}')
# Die einzelnen gefunden Teilstrings ausgeben.
for name in m:
logging.debug(f'Name={name},Start bei: {name.start()}')
if __name__ == '__main__':
unittest.main()