Zadania na wyrażenia regularne (moduł re
)
- 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)
- Napisz funkcję zip_code(s), która sprawdzi, czy napis s jest poprawnym polskim kodem pocztowym.
- Napisz funkcję remove_numbers(s), która usunie z napisu s wszystkie cyfry.
- 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 ."
- 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:
- przykład 1 (poprawny)
- przykład 2 (niepoprawny)
- przykład 3 (niepoprawny)
- 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.
- (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.