WDI – zajęcia 9

Zadania na wyrażenia regularne (moduł re)

  1. Rozgrzewka (najlepiej w ipythonie). Co robią poniższe wyrażenia regularne?
    m = re.search(r'<.*>','<H1>title</H1>')
    m.group()
    m = re.search(r'<.*?>','<H1>title</H1>')
    m.group()
    re.findall(r'<.*>','<H1>title</H1>')
    re.findall(r'<.*?>','<H1>title</H1>')
    re.findall(r'is','this is a sample')
    re.findall(r'\bis\b','this is a sample')
    s = 'da6sdas78sa6sd ds999sd77l jdksdhaj 99999 ds777 dsasadsad'
    re.findall(r'\b([a-z]+|[0-9]+)\b',s)
    re.findall(r'\b([^a-z]+|[^0-9]+)\b',s)
    s = 'plik-1-1 plik-1-2 plik-1-3 plik-2-3 plik-4-2 plik-3-3 plik-7-7 plik-80-80 plik-80-90 plik-9-90'
    for match in re.finditer(r'\bplik-([0-9]+)-\1\b',s):
        print match.group()
    s = 'plik-1-1 plik-1-2 plik-1-3 plik-2-3 plik-4-2 plik-3-3 plik-7-7 plik-80-80 plik-80-90 plik-9-90'
    re.findall(r'\bplik-([0-9]+)-\1\b',s)
    re.findall(r'\b(plik-([0-9]+)-\2)\b',s)
  2. Napisz funkcję zip_code(s), która sprawdzi, czy napis s jest poprawnym polskim kodem pocztowym.
  3. Napisz funkcję remove_numbers(s), która usunie z napisu s wszystkie cyfry.
  4. Napisz funkcję trim_all(s), która zamieni wszystkie ciągi białych znaków w napisie s na pojedynczą spację, czyli np.
    trim_all("Ala     ma kota   .")=="Ala ma kota ."
  5. Załóżmy, że mamy napisać fragment strony internetowej w języku przypominającym html. Do dyspozycji mamy trzy rodzaje znaczników: em, b i br. Znaczniki em i b otaczają fragment tekstu powodując zmianę wyglądu jego czcionki. Z tego powodu występują dwie odmiany tych znaczników: odmiana otwierająca (<em>, <b>) i zamykająca (</em>, </b>). Znacznik br natomiast występuje tylko w jednej wersji (<br/>) powodującej złamanie wiersza w miejscu jego wystąpienia. Dodatkowo chcemy, aby były to jedyne znaczniki występujące w tekście (nie chcemy innych wystąpień znaków < i > w tekście) oraz nie chcemy, aby wewnątrz znaczników em i b znajdowały się inne znaczniki oraz chcemy, aby znaczniki były poprawnie domknięte. Napisz funkcję test_markups(s), która sprawdzi, czy napisany przez nas tekst s spełnia te wymogi. Przykładowe pliki html:
  6. Napisz funkcję pretty_printer(s), która znajdzie wszystkie wystąpienia liczb całkowitych w tekście s i wypisze je w oddzielnych liniach w formacie:
    start end number number_pow

    gdzie start i end to początkowa i końcowa pozycja liczby number w tekście s, a number_pow to liczba 2 podniesiona do potęgi number.

  7. (Zadanie z 2. kolokwium 2012/2013)
    W pliku liczby.txt znajdują się linie zawierające same cyfry (bez spacji). Każda linia zawiera co najwyżej jedno wystąpienie liczb 2012 i 2013. Napisz funkcję suma, która (używając wyrażeń regularnych) znajdzie linie w których liczby 2012 i 2013 występują w tej właśnie kolejności. Jako wynik funkcja suma zwraca sumę liczb znajdujących się w tych liniach
    pomiędzy wystąpieniami liczb 2012 i 2013. Dla pliku o zawartości:

    12322012122013187121982
    02320138401982012
    2012201398239832732927
    1237122012822013173129387132

    mamy suma() = 94.

Leave a Reply

Your email address will not be published. Required fields are marked *