Compare commits

..

1 Commits

Author SHA1 Message Date
Michał Zaręba
dcdcad4cf6 Second class tasks 2024-11-24 21:18:17 +01:00
25 changed files with 241109 additions and 96 deletions

View File

@ -1,14 +0,0 @@
def contains_word_hamlet(line):
target = "Hamlet"
line_length = len(line)
target_length = len(target)
for i in range(line_length - target_length + 1):
if line[i:i + target_length] == target:
return True
return False
with open('/Users/jwieczor/Desktop/djfz-24_25-jezyki-1/TaskA01/simple.in', 'r') as file:
for line in file:
if contains_word_hamlet(line):
print(line, end='')

View File

@ -1,15 +0,0 @@
def contains_word_hamlet(line):
target = "pies"
line_lower = line.lower()
line_length = len(line_lower)
target_length = len(target)
for i in range(line_length - target_length + 1):
if line_lower[i:i + target_length] == target:
return True
return False
with open('/Users/jwieczor/Desktop/djfz-24_25-jezyki-1/TaskA02/simple.in', 'r') as file:
for line in file:
if contains_word_hamlet(line):
print(line, end='')

View File

@ -1,32 +0,0 @@
def is_numeric(s):
for char in s:
if char < '0' or char > '9':
return False
return True
def find_lines_with_date_from_file(filename):
result = []
with open(filename, 'r', encoding='utf-8') as file:
lines = file.readlines()
for line in lines:
i = 0
while i < len(line):
if i + 3 < len(line):
year_candidate = line[i:i+4]
if is_numeric(year_candidate):
year = int(year_candidate)
if 1900 <= year <= 1999:
if i + 6 < len(line) and line[i+4] == ' ' and line[i+5:i+7] == 'r.':
result.append(line.strip())
break
i += 1
return result
filename = 'TaskA03/simple.in'
output = find_lines_with_date_from_file(filename)
for line in output:
print(line)

View File

@ -1,35 +0,0 @@
def extract_numbers(line):
numbers = []
current_number = ""
for char in line:
# Sprawdzamy, czy znak jest cyfrą (ASCII dla cyfr to 48-57)
if '0' <= char <= '9':
current_number += char
else:
if current_number: # Jeśli obecna liczba została zakończona
numbers.append(current_number)
current_number = "" # Resetujemy licznik
# Dodajemy ostatnią liczbę, jeśli linia kończy się na cyfry
if current_number:
numbers.append(current_number)
# Ręczna implementacja metody join
result = ""
for i in range(len(numbers)):
result += numbers[i]
if i < len(numbers) - 1: # Dodajemy spację między liczbami
result += " "
return result
# Przetwarzanie danych wejściowych z pliku
input_file = '/Users/jwieczor/Desktop/djfz-24_25-jezyki-1/TaskA04/simple.in'
with open(input_file, 'r') as file:
for line in file:
result = extract_numbers(line.strip()) # Usuwamy końcowe białe znaki
if result: # Wypisujemy tylko linie, które mają liczby
print(result)

5
TaskB01/description.txt Normal file
View File

@ -0,0 +1,5 @@
Write a program to find lines containing the word "Hamlet".
Make use of regular expressions.
POINTS: 1
DEADLINE: 08-12-2024 23:59:59

106
TaskB01/shakespeare.exp Normal file
View File

@ -0,0 +1,106 @@
CLAUDIUS, King of Denmark, Hamlets uncle.
The GHOST of the late king, Hamlets father.
GERTRUDE, the Queen, Hamlets mother, now wife of Claudius.
HORATIO, Friend to Hamlet.
Dard to the combat; in which our valiant Hamlet,
His fell to Hamlet. Now, sir, young Fortinbras,
Unto young Hamlet; for upon my life,
Enter Claudius King of Denmark, Gertrude the Queen, Hamlet, Polonius,
Though yet of Hamlet our dear brothers death
But now, my cousin Hamlet, and my son—
Good Hamlet, cast thy nighted colour off,
Tis sweet and commendable in your nature, Hamlet,
Let not thy mother lose her prayers, Hamlet.
This gentle and unforcd accord of Hamlet
[_Exeunt all but Hamlet._]
For Hamlet, and the trifling of his favour,
So please you, something touching the Lord Hamlet.
Than a command to parley. For Lord Hamlet,
As to give words or talk with the Lord Hamlet.
Enter Hamlet, Horatio and Marcellus.
That I will speak to thee. Ill call thee Hamlet,
[_Ghost beckons Hamlet._]
[_Exeunt Ghost and Hamlet._]
Enter Ghost and Hamlet.
Wouldst thou not stir in this. Now, Hamlet, hear.
O Hamlet, what a falling off was there,
Adieu, adieu, adieu. Hamlet, remember me.
[_Within._] Lord Hamlet.
And what so poor a man as Hamlet is
Lord Hamlet, with his doublet all unbracd,
Of Hamlets transformation; so I call it,
And bring these gentlemen where Hamlet is.
The very cause of Hamlets lunacy.
Came this from Hamlet to her?
Lord Hamlet is a prince, out of thy star.
Enter Hamlet, reading.
How does my good Lord Hamlet?
You go to seek the Lord Hamlet; there he is.
For we have closely sent for Hamlet hither,
Of Hamlets wildness: so shall I hope your virtues
Enter Hamlet.
You need not tell us what Lord Hamlet said,
Enter Hamlet and certain Players.
How fares our cousin Hamlet?
I have nothing with this answer, Hamlet; these words are not mine.
Come hither, my dear Hamlet, sit by me.
[_Exeunt all but Hamlet and Horatio._]
[_Exeunt all but Hamlet._]
Enter Hamlet.
Enter Hamlet.
Hamlet, thou hast thy father much offended.
Why, how now, Hamlet?
O Hamlet, speak no more.
No more, sweet Hamlet.
Speak to her, Hamlet.
O Hamlet, thou hast cleft my heart in twain.
[_Exit Hamlet dragging out Polonius._]
What, Gertrude? How does Hamlet?
Hamlet in madness hath Polonius slain,
Enter Hamlet.
[_Within._] Hamlet! Lord Hamlet!
What noise? Who calls on Hamlet? O, here they come.
Enter Hamlet and Guildenstern.
Now, Hamlet, wheres Polonius?
Hamlet, this deed, for thine especial safety,—
Ay, Hamlet.
Thy loving father, Hamlet.
The present death of Hamlet. Do it, England;
Enter Hamlet, Rosencrantz, Guildenstern &c.
[_Exeunt all but Hamlet._]
I should be greeted, if not from Lord Hamlet.
Letters, my lord, from Hamlet.
From Hamlet! Who brought them?
Tis Hamlets character. Naked!
And that in Hamlets hearing, for a quality
Did Hamlet so envenom with his envy
Hamlet comes back: what would you undertake
Hamlet returnd shall know you are come home:
Enter Hamlet and Horatio, at a distance.
Hamlet oercame Fortinbras.
that young Hamlet was born,—he that is mad, and sent into England.
I hopd thou shouldst have been my Hamlets wife;
Hamlet the Dane.
Hamlet! Hamlet!
Enter Hamlet and Horatio.
[_Hamlet moves him to put on his hat._]
Come, Hamlet, come, and take this hand from me.
[_The King puts Laertess hand into Hamlets._]
Wast Hamlet wrongd Laertes? Never Hamlet.
If Hamlet from himself be taen away,
Then Hamlet does it not, Hamlet denies it.
Hamlet is of the faction that is wrongd;
His madness is poor Hamlets enemy.
Give them the foils, young Osric. Cousin Hamlet,
If Hamlet give the first or second hit,
The King shall drink to Hamlets better breath,
Now the King drinks to Hamlet. Come, begin.
Stay, give me drink. Hamlet, this pearl is thine;
Here, Hamlet, take my napkin, rub thy brows.
The Queen carouses to thy fortune, Hamlet.
[_Laertes wounds Hamlet; then, in scuffling, they change rapiers, and
Hamlet wounds Laertes._]
No, no, the drink, the drink! O my dear Hamlet!
It is here, Hamlet. Hamlet, thou art slain.
Exchange forgiveness with me, noble Hamlet.
Bear Hamlet like a soldier to the stage,

169442
TaskB01/shakespeare.in Normal file

File diff suppressed because it is too large Load Diff

2
TaskB01/simple.exp Normal file
View File

@ -0,0 +1,2 @@
Here comes Hamlet
Hamlet Hamlet again

3
TaskB01/simple.in Normal file
View File

@ -0,0 +1,3 @@
Here comes Hamlet
ABC
Hamlet Hamlet again

7
TaskB02/description.txt Normal file
View File

@ -0,0 +1,7 @@
Write a program to find lines containing the word "pies" separated by spaces.
The word does not need to have space on the left if it is the line beginning or space on the right if it is line ending.
Return line no matter of word "pies" casing.
Make use of regular expressions.
POINTS: 1
DEADLINE: 08-12-2024 23:59:59

View File

@ -0,0 +1,13 @@
Pies ten pochodzi z południowych Chin, z terenów prowincji Guangdong. Został rozpropagowany i hodowany w celach wystawowych przez hodowców w USA. Nazwa psa, pochodząca z chińskiego "shā pí" (沙皮), oznacza dosłownie "piaszczysta skóra".
Chart polski polska rasa psa myśliwskiego, znana prawdopodobnie od czasów Galla Anonima, zaliczana do grupy chartów. Dawniej użytkowana była przede wszystkim do polowań, obecnie jako pies reprezentacyjny.
Smukły pies o wąskim pysku. Chart polski jest wyraźnie mocniejszy i nie tak finezyjny w kształtach jak inne charty. Jest najwyższą z polskich ras.
Chart polski to pies silny, wytrzymały, o dobrze zbalansowanym ciele i proporcjach (wpisany jest w prostokąt oparty na dłuższym boku) pozwalających nie tylko na szybki galop, ale i na pokonywanie dużych odległości wyciągniętym kłusem. Jest psem o okrywie włosowej dobrze chroniącej go przed zimnem, wilgocią i wiatrem.
Pies wymagający sporej dawki codziennego ruchu, stąd jest idealnym towarzyszem dla ludzi uprawiających jeździectwo lub jogging.
W filmie występuje pies rasy landseer.
Bohaterami anime jest grupa łowców nagród, podróżująca statkiem kosmicznym o nazwie "Bebop": Spike Spiegel, Faye Valentine, Jet Black, haker Ed oraz genetycznie zmodyfikowany pies Ein.
Tytułowym głównym bohaterem serii jest Lucky Luke - kowboj, najszybszy rewolwerowiec na Dzikim Zachodzie i najgorszy koszmar braci Dalton. Zawsze, gdy planują oni skok na bank lub inne przestępstwo, dzielny stróż prawa staje im na drodze. W jego przygodach towarzyszą mu inteligentny koń Jolly Jumper i pies Bzik (we francuskojęzycznym oryginale: "Rantanplan").
Serial w krzywym zwierciadle przedstawia życie typowej amerykańskiej rodziny. Jej głową i jedynym żywicielem jest wiecznie sfrustrowany sprzedawca butów, Al Bundy. Kocha swojego starego dodge'a, wolny czas spędza siedząc na kanapie, oglądając telewizję i pijąc piwo lub na posiedzeniach w toalecie. Jego małżonką jest Peggy, która całymi dniami przesiaduje przed telewizorem, oglądając "The Oprah Winfrey Show", i The Phil Donahue Show zajadając się popcornem i czekoladkami, paląc przy tym papierosa za papierosem. O jej podejściu do typowo domowych zajęć świadczą zadawane przez nią pytania, np. o odkurzacz "Jak się nazywa to coś, co ciągniesz po dywanie, a ono buczy?" Tytułowymi dziećmi są nastoletni Bud oraz Kelly, którzy nie przepadają za sobą i nie przepuszczą żadnej okazji, aby sobie dokuczyć czy donieść na siebie. Kelly i Bud dojrzewają w trakcie trwania serialu, przez co trochę się zmieniają: Bud z wrednego kilkunastolatka przeistacza się w nastoletniego macho, którego nie chce żadna dziewczyna, a Kelly z każdą serią staje się coraz mniej inteligentna. Wiecznie niedocenianym członkiem rodziny jest pies Buck, który jednak żyje swoim życiem i sam troszczy się o siebie. W trakcie wszystkich dziesięciu lat trwania serialu Bundym towarzyszy dwójka sąsiadów: Marcy, najpierw ze swoim pierwszym mężem, Steve'em Rhoadesem, a następnie z Jeffersonem d'Arcym. Marcy lubi przebywać z Peggy, jest za to na bakier z Alem, natomiast Al utrzymuje dobre stosunki z mężami Marcy, szczególnie Jeffersonem Steve raczej nie darzył Bundych tak bezwzględną sympatią.
Buck (prawdziwe imię Michael; trener Steven Ritt) to pies rodziny Bundych, Briard. Głosu użycza mu Kevin Curran, a w odcinkach specjalnych Cheech Marin. Zdechł w wieku dwunastu lat (w 1996 roku Michael przeszedł na emeryturę, zdechł dziewięć miesięcy po tym, jak Bucka uśmiercono w serialu).
Lucky to drugi pies rodziny Bundych, spaniel, reinkarnacja Bucka.
20 stycznia 1974 r. o godz. 10.40 w Dolinie Mięguszowieckiej wydarzyła się największa jak do owej pory katastrofa lawinowa w Tatrach. Żlebem spod Przełęczy nad Skokiem w Grani Baszt zeszła potężna lawina, która przewaliła się przez Mięguszowiecki Potok i wdarła 140 m na przeciwległy stok, wspinając się na niego z rozpędu aż 44 m w górę. Na stoku tym, na śnieżnym pólku trenowali z instruktorem uczestnicy kursu narciarskiego ze słowackiego Technikum Budowlanego. Lawina przysypała 24 z nich. Dzięki błyskawicznej akcji ratunkowej (było to tylko 400 m od schroniska nad Popradzkim Stawem) udało się odgrzebać spod śniegu 11 płycej przywalonych. W ciągu następnych godzin i kilku dni liczne zespoły ratunkowe (z pomocą przyszło również wojsko) odgrzebały ciała 10 uczestników kursu; wśród nich nauczyciela z 12-letnim synem. Pies wskazał miejsce, gdzie po 5 godzinach od zejścia lawiny wydobyto żywego 18-latka przywalonego metrową warstwą śniegu. Ciała dwóch uczniów udało się znaleźć dopiero wiosną po stopieniu się śniegu.
Początkowo Morris wykorzystał w swoich komiksach historycznych braci Daltonów Grat, Bill i Emmett, których przedstawił jako bardzo groźnych i inteligentnych przestępców. Niestety po pierwszym spotkaniu z Lucky Luke, zostali aresztowani i skazani w więzieniu na śmierć. Morris żałował potem swojej decyzji i wraz z Gościnnym wprowadził na ich miejsce, czwórkę kuzynów (także) Daltonów Joe, Williama, Jacka i Averelle, którzy byli przeciwieństwem swoich kuzynów. Wiecznie pechowi, gamoniowaci i niezbyt inteligentni. Wkrótce stali się oni najpopularniejszymi postaciami w serii, zaraz po samym Lucky Luke i z czasem dołączył do nich pies Rantanplan. Doczekali się także solowego filmu dystrybuowanego w Polsce pt. "Lucky Luke" (oryg. "Les Dalton").

50000
TaskB02/polish_wiki_excerpt.in Normal file

File diff suppressed because one or more lines are too long

3
TaskB02/simple.exp Normal file
View File

@ -0,0 +1,3 @@
Pies ma Alę
Kot i pies to zwierzęta
pies

5
TaskB02/simple.in Normal file
View File

@ -0,0 +1,5 @@
Pies ma Alę
Ala ma psa
tu nic nie ma
Kot i pies to zwierzęta
pies

6
TaskB03/description.txt Normal file
View File

@ -0,0 +1,6 @@
Write a program to find lines containing date from 1900 to 1999 in format '19XX r.' no matter what on the left or right of the expression.
Note that part ' r.' is obligatory.
Make use of regular expressions.
POINTS: 2
DEADLINE: 08-12-2024 23:59:59

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
../TaskA02/polish_wiki_excerpt.in

3
TaskB03/simple.exp Normal file
View File

@ -0,0 +1,3 @@
Kiedyś był 1934 r.
Kiedyś był 1934 r.fsdfsdfsdf
1934 r. to jakaś data

5
TaskB03/simple.in Normal file
View File

@ -0,0 +1,5 @@
Kiedyś był 1934 r.
Kiedyś był 1934 r.fsdfsdfsdf
Kiedyś był 1935 rok
1934 r. to jakaś data
1934 to też jakaś data

6
TaskB04/description.txt Normal file
View File

@ -0,0 +1,6 @@
Write a program to find all maximum substrings of digits.
Return only these substrings separated by spaces in their order.
Make use of regular expressions.
POINTS: 2
DEADLINE: 08-12-2024 23:59:59

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1 @@
../TaskA02/polish_wiki_excerpt.in

4
TaskB04/simple.exp Normal file
View File

@ -0,0 +1,4 @@
34234 34 5
34535
34
1992 1999

5
TaskB04/simple.in Normal file
View File

@ -0,0 +1,5 @@
34234 34 dfd gfd 5
34535
fsdflskfjsdflk
fsdkfj sdf34fdfd
Firma powstała w 1992 r., z połączenia Authorware, Inc. (twórców pakietu Authorware) i MacroMind-Paracomp (producenta Macromind Director). W 1999 r. Macromedia zakupiła firmę Allaire i jej bi

602
lab-02.ipynb Normal file
View File

@ -0,0 +1,602 @@
{
"cells": [
{
"cell_type": "markdown",
"source": [
"# Języki formalne i złożoność obliczeniowa\n",
"## Część 1: Wprowadzenie do biblioteki re\n"
],
"metadata": {
"collapsed": false
},
"id": "f5376d249e31d5aa"
},
{
"cell_type": "markdown",
"source": [
"Wyrażenia regularne będziemy robić na podstawie języka python3. Dokumentacja: https://docs.python.org/3.11/library/re.html\n",
"\n",
"Użyteczna strona do testowania wyrażeń regularnych: https://regex101.com/\n"
],
"metadata": {
"collapsed": false
},
"id": "ce091d4ec144df32"
},
{
"cell_type": "markdown",
"source": [
"# Podstawowe funkcje"
],
"metadata": {
"collapsed": false
},
"id": "35428280eb1f704"
},
{
"cell_type": "markdown",
"source": [
"## Match\n",
"match - zwraca dopasowanie od początku stringa"
],
"metadata": {
"collapsed": false
},
"id": "9674be284007455d"
},
{
"cell_type": "code",
"execution_count": null,
"outputs": [],
"source": [
"import re\n",
"wynik = re.match(r'Ala', 'Ala ma kota. Kot ma Alę.')\n",
"print(wynik)\n",
"print(f\"Dopasowano: '{wynik.group()}', początek: {wynik.start()}, koniec: {wynik.end()}\")\n"
],
"metadata": {
"collapsed": false
},
"id": "fa7637b60ae679b5"
},
{
"cell_type": "markdown",
"source": [
"## Search\n",
"search - zwraca pierwsze dopasowanie w napisie\n"
],
"metadata": {
"collapsed": false
},
"id": "626c591ab52a086"
},
{
"cell_type": "code",
"execution_count": null,
"outputs": [],
"source": [
"# search\n",
"wynik = re.search(r'ni', 'Może nie najtaniej, ale jako tako.')\n",
"\n",
"if wynik:\n",
" print(f\"Dopasowano: '{wynik.group()}', początek: {wynik.start()}, koniec: {wynik.end()}\")\n",
"else:\n",
" print('Nie znaleziono szukanego ciągu znaków.')"
],
"metadata": {
"collapsed": false
},
"id": "4f5d7077a85b7108"
},
{
"cell_type": "code",
"execution_count": null,
"outputs": [],
"source": [
"tekst = \"Kto zakłóca ciszę nocną musi ponieść karę: 100 batów!\"\n",
"\n",
"wzorzec = re.compile('ci')\n",
"\n",
"wynik = wzorzec.search(tekst)\n",
"\n",
"if wynik:\n",
" print(f\"Dopasowano: '{wynik.group()}', początek: {wynik.start()}, koniec: {wynik.end()}\")\n",
"else:\n",
" print('Nie znaleziono szukanego ciągu znaków.')"
],
"metadata": {
"collapsed": false
},
"id": "b9da286f8d6936fb"
},
{
"cell_type": "markdown",
"source": [
"## findall\n",
"findall - zwraca listę wszystkich dopasowań\n"
],
"metadata": {
"collapsed": false
},
"id": "600b87dd6af48c04"
},
{
"cell_type": "code",
"execution_count": null,
"outputs": [],
"source": [
"# findall\n",
"wzorzec = re.compile('o')\n",
"\n",
"wynik = wzorzec.findall(tekst)\n",
"\n",
"if len(wynik) > 0:\n",
" print(type(wynik))\n",
" print(f'Dopasowano: {wynik}')\n",
"else:\n",
" print(f'{wynik} Nie znaleziono szukanego ciągu znaków.')"
],
"metadata": {
"collapsed": false
},
"id": "37a93d9d61c6178d"
},
{
"cell_type": "code",
"execution_count": null,
"outputs": [],
"source": [
"wzorzec = re.compile('o')\n",
"\n",
"wynik = wzorzec.finditer(tekst)\n",
"for w in wynik:\n",
" print(type(w))\n",
" print(f'Dopasowano: \"{w.group()}\", początek: {w.start()}, koniec: {w.end()}')"
],
"metadata": {
"collapsed": false
},
"id": "3232906632de2fe1"
},
{
"cell_type": "markdown",
"source": [
"*Uwaga*: pobierając z iteratora elementy, usuwamy je, nie można zatem ponownie się do nich odwołać."
],
"metadata": {
"collapsed": false
},
"id": "62e8a0370ee58827"
},
{
"cell_type": "markdown",
"source": [
"## Użycie przedrostka 'r' w wyrażeniach regularnych w Pythonie\n",
"\n",
"W Pythonie przedrostek `r` przed łańcuchem znaków oznacza \"surowy\" łańcuch znaków (ang. *raw string*). Dlaczego jest to przydatne w kontekście wyrażeń regularnych?\n",
"\n",
"Wyrażenia regularne często używają znaków specjalnych, takich jak `\\d`, `\\w`, `\\b` itp. W standardowych łańcuchach znaków w Pythonie, znaki te mają specjalne znaczenie. Na przykład, `\\t` oznacza tabulację, a `\\n` oznacza nową linię.\n",
"\n",
"Jeśli chcemy użyć takiego wyrażenia regularnego w Pythonie, musielibyśmy podwajać znaki ukośnika, aby uniknąć konfliktu z wbudowanymi sekwencjami ucieczki w łańcuchach znaków, np. `\\\\d`, `\\\\w`."
],
"metadata": {
"collapsed": false
},
"id": "6342ff85cd5fc35a"
},
{
"cell_type": "code",
"execution_count": null,
"outputs": [],
"source": [
"# Bez użycia surowego łańcucha znaków\n",
"result1 = re.findall(\"\\\\d+\", \"123 abc 456\")\n",
"print(result1)\n",
"\n",
"# Używając surowego łańcucha znaków\n",
"result2 = re.findall(r\"\\d+\", \"123 abc 456\")\n",
"print(result2)\n"
],
"metadata": {
"collapsed": false
},
"id": "b09fa3103ec18719"
},
{
"cell_type": "markdown",
"source": [
"## sub\n",
"Kolejną użyteczną metodą jest sub(), która pozwala na zmianę wzorca na inny ciąg znaków:"
],
"metadata": {
"collapsed": false
},
"id": "e9e3f41e90bbd746"
},
{
"cell_type": "code",
"execution_count": null,
"outputs": [],
"source": [
"wzorzec = re.compile(r'ni')\n",
"\n",
"zmieniony = wzorzec.sub('Ni!', tekst)\n",
"print(zmieniony)"
],
"metadata": {
"collapsed": false
},
"id": "af633211d7faca67"
},
{
"cell_type": "markdown",
"source": [
"## split\n",
"split - dzieli napis na podstawie wzorca"
],
"metadata": {
"collapsed": false
},
"id": "ea9205aa03ed7476"
},
{
"cell_type": "code",
"execution_count": null,
"outputs": [],
"source": [
"wzorzec = re.compile(r' ')\n",
"\n",
"wynik = wzorzec.split(tekst)\n",
"print(f'Uzyskano {len(wynik)} wyniki/ów.')\n",
"for w in wynik:\n",
" print(w)"
],
"metadata": {
"collapsed": false
},
"id": "71dc3b254a93f31c"
},
{
"cell_type": "markdown",
"source": [
"# Metaznaki\n",
"[] - zbiór znaków\n",
"\n",
". - jakikolwiek znak\n",
"\n",
"^ - początek napisu\n",
"\n",
"$ - koniec napisu\n",
"\n",
"? - znak występuje lub nie występuje\n",
"\n",
"\\* - zero albo więcej pojawień się\n",
"\n",
"\\+ - jeden albo więcej pojawień się\n",
"\n",
"{} - dokładnie tyle pojawień się\n",
"\n",
"| - lub\n",
"\n",
"() - grupa\n",
"\n",
"\\ - znak ucieczki\n",
"\n",
"\\d digit\n",
"\n",
"\\D nie digit\n",
"\n",
"\\s whitespace\n",
"\n",
"\\S niewhitespace"
],
"metadata": {
"collapsed": false
},
"id": "4b16abb6848f09ae"
},
{
"cell_type": "code",
"execution_count": null,
"outputs": [],
"source": [
"wzorzec = re.compile(r'.')\n",
"print(wzorzec.findall(tekst))"
],
"metadata": {
"collapsed": false
},
"id": "ac6669cac4f52d27"
},
{
"cell_type": "code",
"execution_count": null,
"outputs": [],
"source": [
"# jeden lub wiecej / zero lub wiecej\n",
"\n",
"tekst = \"BCAAABGTAABBBCCTTSAGG4324242\"\n",
"print(f'Łańcuch: {tekst}')\n",
"wzorzec = re.compile(r'X+')\n",
"print(f'Jeden lub więcej X: {wzorzec.findall(tekst)}')\n",
"wzorzec = re.compile(r'X*')\n",
"print(f'Zero lub więcej X: {wzorzec.findall(tekst)}')"
],
"metadata": {
"collapsed": false
},
"id": "634e4b66a5081f97"
},
{
"cell_type": "code",
"execution_count": null,
"outputs": [],
"source": [
"# zero lub jeden\n",
"\n",
"print(f'Łańcuch: {tekst}')\n",
"wzorzec = re.compile(r'.?')\n",
"print(wzorzec.findall(tekst))\n",
"wzorzec = re.compile(r'.?T')\n",
"print(wzorzec.findall(tekst))"
],
"metadata": {
"collapsed": false
},
"id": "44195e00a81b23fb"
},
{
"cell_type": "code",
"execution_count": null,
"outputs": [],
"source": [
"print(f'Łańcuch: {tekst}')\n",
"wzorzec = re.compile(r'A+')\n",
"print(f'Dopasowanie zachłanne: {wzorzec.findall(tekst)}')\n",
"wzorzec = re.compile(r'A+?')\n",
"print(f'Dopasowanie leniwe: {wzorzec.findall(tekst)}')"
],
"metadata": {
"collapsed": false
},
"id": "ea861a33e942d42a"
},
{
"cell_type": "code",
"execution_count": null,
"outputs": [],
"source": [
"print(f'Łańcuch: {tekst}')\n",
"\n",
"# dokladnie 3 dopasowania\n",
"wzorzec = re.compile(r'A{3}')\n",
"print(f'{wzorzec.findall(tekst)}')\n",
"\n",
"# pomiedzy 2 i 3 dopasowania\n",
"wzorzec = re.compile(r'A{2,3}')\n",
"print(f'{wzorzec.findall(tekst)}')\n",
"\n",
"# 2 lub wiecej dopasowan\n",
"wzorzec = re.compile(r'A{2,}')\n",
"print(f'{wzorzec.findall(tekst)}')\n",
"\n",
"# 3 lub mniej dopasowan\n",
"wzorzec = re.compile(r'A{,3}')\n",
"print(f'{wzorzec.findall(tekst)}')"
],
"metadata": {
"collapsed": false
},
"id": "751272b81731af36"
},
{
"cell_type": "code",
"execution_count": null,
"outputs": [],
"source": [
"# poczatek lub koniec lancucha\n",
"\n",
"tekst = \"Ale pięknie pachnie! Maciek, co gotujesz?\"\n",
"\n",
"# poczatek lancucha\n",
"wzorzec = re.compile(r'^Ale')\n",
"print(f'{wzorzec.findall(tekst)}')\n",
"\n",
"# poczatek lancucha\n",
"wzorzec = re.compile(r'^ale')\n",
"print(f'{wzorzec.findall(tekst)}')\n",
"\n",
"# koniec lancucha\n",
"wzorzec = re.compile(r'Ale$')\n",
"print(f'{wzorzec.findall(tekst)}')\n",
"\n",
"# koniec lancucha + znak ucieczki\n",
"wzorzec = re.compile(r'gotujesz\\?$')\n",
"print(f'{wzorzec.findall(tekst)}')"
],
"metadata": {
"collapsed": false
},
"id": "97bcd3ff7cc3913"
},
{
"cell_type": "code",
"execution_count": null,
"outputs": [],
"source": [
"# grupy znakow\n",
"wzorzec = re.compile(r'[A-Z]')\n",
"print(f'Duże litery: {wzorzec.findall(tekst)}')\n",
"\n",
"wzorzec = re.compile(r'[a-z]')\n",
"print(f'Małe litery: {wzorzec.findall(tekst)}')\n",
"\n",
"wzorzec = re.compile(r'[A-z]')\n",
"print(f'Małe i duże litery: {wzorzec.findall(tekst)}')\n",
"\n",
"wzorzec = re.compile(r'[aeiou]')\n",
"print(f'Samogłoski: {wzorzec.findall(tekst)}')"
],
"metadata": {
"collapsed": false
},
"id": "ee099e6e1e5e2f80"
},
{
"cell_type": "code",
"execution_count": null,
"outputs": [],
"source": [
"# wzorzec(?=X) - dopasowanie, jeśli po nim występuje X\n",
"\n",
"tekst = \"ACABADAHSAIIIQIIINSAODIANSAAGAGAGGGGPAAG\"\n",
"\n",
"print(f'Łańcuch: {tekst}')\n",
"wzorzec = re.compile(r'G+(?=A)')\n",
"print(f'{wzorzec.findall(tekst)}')"
],
"metadata": {
"collapsed": false
},
"id": "dd6351952639ef42"
},
{
"cell_type": "code",
"execution_count": null,
"outputs": [],
"source": [
"tekst = \"Ale się zrobiła świąteczna atmosfera.\"\n",
"wzorzec = re.compile(r'Ale|świąteczna|zrobiła')\n",
"print(f'{wzorzec.findall(tekst)}')"
],
"metadata": {
"collapsed": false
},
"id": "c7f3e1b9d16c91db"
},
{
"cell_type": "markdown",
"source": [
"## Znaki specjalne\n",
"\n",
"\\s\t- biały znak\n",
"\n",
"\\S\t- nie-biały znak\n",
"\n",
"\\d\t- cyfra\n",
"\n",
"\\D\t- nie-cyfra\n",
"\n",
"\\w\t- znaki alfanumeryczne (litery i cyfry) oraz\n",
" \n",
"\\W\t- znaki nie-alfanumeryczne i nie\n",
" \n",
"\\b\t- początek lub koniec ,,słowa\n",
" \n",
"\\B\t- nie początek lub koniec ,,słowa''\n",
"\n",
"[a-z]\t- małe litery\n",
"\n",
"[A-Z]\t- wielkie litery\n",
"\n",
"[0-9]\t- cyfry\n"
],
"metadata": {
"collapsed": false
},
"id": "c1a7435b7887f5c2"
},
{
"cell_type": "code",
"execution_count": null,
"outputs": [],
"source": [
"wzorzec = re.compile(r'\\w+')\n",
"print(f'Wyrazy: {wzorzec.findall(tekst)}')\n"
],
"metadata": {
"collapsed": false
},
"id": "3b1b1f147233455d"
},
{
"cell_type": "markdown",
"source": [
"## Część II: Zadania praktyczne\n",
"\n",
"### Zadanie 1: Wyszukiwanie numerów telefonu\n",
"\n",
"Napisz wyrażenie regularne, które znajdzie wszystkie numery telefonu w tekście. Zakładamy, że numer telefonu ma format `xxx-xxx-xxx` lub `xxx xxx xxx`.\n"
],
"metadata": {
"collapsed": false
},
"id": "e0670d19927add2b"
},
{
"cell_type": "code",
"execution_count": null,
"outputs": [],
"source": [
"tekst = \"\"\"\n",
"Jan: 123-456-789\n",
"Anna: 987 654 321\n",
"Karol: 456-789-123\n",
"Zbyszek: 53252525342252\n",
"Tytus: aaaa666432\n",
"\"\"\"\n",
"\n",
"wzorzec = re.compile(r\"\")\n",
"print(f'Numery: {wzorzec.findall(tekst)}')"
],
"metadata": {
"collapsed": false
},
"id": "aecbbf61477429ac"
},
{
"cell_type": "code",
"execution_count": null,
"outputs": [],
"source": [
"tekst = \"\"\"\n",
"jan.kowalski@gmail.com\n",
"anna.zielinska@amu.edu.pl\n",
"karol.nowak@interia.pl\n",
"hello world\n",
"@test.pl\n",
"x@x\n",
"fff22@gmail.com\n",
"\"\"\"\n",
"\n",
"wzorzec = re.compile(r\"\")\n",
"print(f'Adresy: {wzorzec.findall(tekst)}')"
],
"metadata": {
"collapsed": false
},
"id": "1dcf9585d7b78073"
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.6"
}
},
"nbformat": 4,
"nbformat_minor": 5
}