uj_sor = "\n"           #
horizontalis_tab = "\t" # vizszintes tabulator
rep = "\\"              # rep = forditott per
egyes_idezojel = "\'"   # '
kettes_idezojel = "\""  # "
print(egyes_idezojel + uj_sor + kettes_idezojel)
a = "That's"
b = "fine"
| Operator | Description | Input | Output | ||
|---|---|---|---|---|---|
| + | Concatenation | a + b | That'sfine | ||
| * | Repetition | 2 * b | finefine | ||
| [] | Slice | a[1] | h | ||
| [:] | Range Slice | a[1:4] | hat | ||
| in | Membership | 'a' in a | True | ||
| not in | Membership | 'a' not in b | True | ||
| r/R | Raw String suppresses escape chars | r'\n' | \n | 
A str() függvénnyel tudunk stringgé konvertálni.
s = "ez egy sztring"
print("egy" in s)
s.find("egy")
hi = "how ARE you"
| Method | Description | Input | Output | 
|---|---|---|---|
| .capitalize() | first letter into upper case | hi.capitalize() | How are you | 
| .lower() | lower case | hi.lower() | how are you | 
| .upper() | upper case | hi.upper() | HOW ARE YOU | 
| .title() | every word capitalized | hi.title() | How Are You | 
s = "hol KIS-, hol NAGYbetűk"
Az első szó kezdődjön nagybetűvel, az összes többi betű legyen kicsi:
s.capitalize()
Csupa nagybetűssé tevés:
s.upper()
Csupa kisbetűssé tevés:
s.lower()
| Method | Boolean value | 
|---|---|
| .isalnum() | alphanumeric characters (no symbols)? | 
| .isalpha() | alphabetic characters (no symbols)? | 
| .islower() | lower case? | 
| .isnumeric() | numeric characters? | 
| .isspace() | whitespace characters? | 
| .istitle() | is in title case? | 
| .isupper() | upper case? | 
Csak az ábécé betűit tartalmazza-e (emlékeztető: a szóköz nem az ábécé betűje):
"a b".isalpha()
alnum = "23 apples"
num = "-1234"
title = "Big Apple"
print(alnum.isalnum(), num.isnumeric(), title.istitle()) 
alnum = "23apples"
num = "1234"
white = "   \t   \n\n   "
print(alnum.isalnum(), num.isnumeric(), white.isspace()) 
hi = "how ARE you"
seq = ['h', 'o', 'w']  #OR seq = 'h', 'o', 'w'
wh = "\t this \n "
| Method | Description | Input | Output | 
|---|---|---|---|
| .join() | concatenates with separator string | " < ".join(seq) | h < o < w | 
| .lstrip() | removes leading whitespaces | wh.lstrip() | "this \n " | 
| .rstrip() | removes trailing whitespaces | wh.rstrip() | "\t this" | 
| .strip() | performs lstrip() and rstrip() | wh.strip() | "this" | 
| .replace(old, new [, m]) | replaces old with new at most m times | hi.replace("o", "O") | hOw ARE yOu | 
| .split(s[,m]) | splits at s max m times, returns list | hi.split() | [ "how", "ARE", "you" ] | 
Karakterlánc felbontása megadott szeparátor karakter segítségével (ha a szeparátor nincs megadva, nem látható (white spaces) karaktereknél vág szét). Eredményül visszakapjuk a részsztringek listáját:
wh = 'tab\túj sor\nszóköz'
wh.split()
s.split()   # nem láthatónál vágja szét (white space)
s = "elso  masodik\tharmadik\nnegyedik" # szokozokkel szavakra vagjuk
s.split(" ")
s = "elso masodik, harmadik, negyedik"
s.split(", ")            # itt egy vesszo es egy szokoz is van!
Nem látható (whitespace) karakterek törlése a karakterlánc elejéről és végéről, vagy megadott karakterek törlése az elejéről és végéről:
s = '  \t szóközök \t \n\n    '
s.strip()
s = "...vesszővel vagy ponttal kezdődik vagy vegződik,"
print(s.strip(".,"))   # mindket vegerol
print(s.rstrip(".,"))  # csak jobbrol torol
print(s.lstrip(".,"))  # csak balrol torol
Formázásra a % operátor könnyen használható:
name = "Lucy"
"Hi %s!" % name
A lehetőségeket összefoglaljuk a következő táblázatban:
| %char | short for | example | output | |
|---|---|---|---|---|
| %s | string | "Hi %s" % "Joe" | "Hi Joe" | |
| %d | digits: 0123456789 | "%d is prime" % 7 | "7 is prime" | |
| %o | octal: 01234567 | "8 = octal %o" % 8 | "8 = octal 10" | |
| %x | hex: 0123456789abcdef | "10 = hex %x" % 10 | "10 = hex a" | |
| %X | hex: 0123456789ABCDEF | "10 = hex %X" % 10 | "10 = hex A" | |
| %f, %F | floating point | "1.2 = %f" % 1.2 | '1.2 = 1.200000' | |
| %e, %E | exponential | "12 = %e" % 12 | '12 = 1.200000e+01' | |
| %g, %G | general | "1.2e2 = %g" % 1.2e2 | '1.2e2 = 120' | 
x = -12.345
y = 12.3e10
print("f: %f, e: %e, g: %g" % (x, x, x))
print("f: %f, e: %e, g: %g" % (y, y, y))
"Hi %s! You have got %d points!" % ("Joe", 5)
name = "Lucy"
points = 10
"Hi %s! You have got %d points!" % (name, points)
format metódussal¶Itt az objektum a formátumot leíró karakterlánc és a format metódus argumentumai a behelyettesítendő értékek. A formátumban { és } között először a format argumentumának indexe szerepel, majd opcionálisan : után a formátum leírása:
'{0}-{1}-{2} {0}, {1}, {2}, {0}{0}{0}'.format('X', 'Y', 'Z')
| Jel | Jelentés | 
|---|---|
| d | Decimális (ezt kell tudni) | 
| b | Bináris | 
| o | Oktális | 
| x, X | hex, HEX formátum | 
| f, F | (float) lebegőpontos szám | 
| e, E | (exp) lebegőpontos szám exponenciális alakban | 
| < | balra igazít | 
| > | jobbra igazít | 
| ^ | középre igazít | 
| c^ | középre igazít és körülötte az opcionális 'c' karakterrel kitölt | 
print("01234 01234 01234 0123456789")
print('{0:5} {1:5d} {2:_>5} {3:_^10}'.format('0123', 1234, '|', 'kozepe'))
"int {0:d},  hex {0:x} {0:X},  oct {0:o},  bin {0:0>8b}".format(42)
"{0}, {0:e}, {0:f}, {0:10.4f}, {0:15.1f}".format(-12.345)
Nem csak a format-on belüli index használható az érték azonosítására, de nevek is használhatók:
'A középpont: ({x:5}, {y:f})'.format(y=5, x=3)
x1 = 3; y1 = 4
print('A középpont: ({x}, {y})'.format(x=x1, y=y1))
tablazat = [["Első sor", -2, -310],
            ["Második sor", 3, 1], 
            ["Harmadik sor", -321, 11]]
formazott_tablazat = ""
for sor in tablazat:
    formazott_tablazat += "{0:_<13}".format(sor[0])
    for i in range(1, len(sor)):
        formazott_tablazat += "{0:>7d}".format(sor[i])
    formazott_tablazat += "\n" 
print(formazott_tablazat)
F-sztring az, ami elé 'f' vagy 'F' betűt írunk. Ezekben kapcsos zárójelek közé Python kifejezések rakhatók, melyek futás közben értékelődnek ki. (Az előző változatokban csak konstans értékek kerülhettek be.)
name = "Lucy"
points = 100
f"Hi {name}! You have {points} points!"
a, b = 3, 5
f"2({a} + {b}) = {2*(a+b)}"
width = 8
precision = 4
value = -123.4567
f"result: {value:{width}.{precision}}"  # nested fields
num = 300
f'{num}, {num:x}, {num:o}, {num:b}, {num:10}, {num:10X}'
num, numb, numo, numx = 12, 0b10010, 0o371, 0xabc
f"{num}, {numb}, {numo}, {numx}"
d = {"one": 1, "two": 2}
f"{d['one']} is one" # f"{d["one"]} is one" hibaüzenetet adna!!!
s = "hol vagyok"
print('0123456789'*3)
print(s.center(30))
print(s.rjust(30))
print(s.ljust(30))
A paraméterként átadott érték szabályozza a létrejött string hosszát.
Így egy táblázat (tömb) kiírása jobban kezelhető:
karakteres_tablazat = ""
for sor in tablazat:
    karakteres_tablazat += sor[0].ljust(13)
    for i in range(1, len(sor)):
        karakteres_tablazat += str(sor[i]).rjust(7)
    karakteres_tablazat += "\n"
print(karakteres_tablazat)
Adott jellemzőkkel rendelkező karakterláncok felismerése a cél (pl. érvényes email-cím, dátum, római szám, IP-cím,...)
Olvasnivalók:
Vannak online tesztoldalak, ahol programozás nélkül lehet próbálgatni a reguláris kifejezéseket: https://regex101.com/#python, https://extendsclass.com/regex-tester.html#python, https://www.regextester.com/, https://pythex.org/ (itt van puska is).
A reguláris kifejezésekben használt metakarakterek: . ^ $ * + ? { } [ ] ( ) \ |
| Jel | Jelentése (mire illeszkedik) | Példa | Illeszkedik | 
|---|---|---|---|
| . | bármely karakterre illeszkedik (kivéve új sor) | "t.t." | tatu, tütü | 
| ^ | a minta elejére illeszkedik | "^Mélységes mély" | |
| $ | a minta végére illeszkedik | "és bízva bízzál.\$" | |
| | | logikai vagy a környező RE-ekre | "Informati(cs|ka)" | Informatics, Informatika | 
| [] | a felsorolt karakterek bármelyikére illeszkedik | [xq] | x, q | 
| [^chars] | bármi, kivéve a felsoroltak | [^xq] | a, b, c,... | 
| [a-z] | tartomány | "[0-9a-fA-F]" | bármely hexa jegy | 
| () | hivatkozható csoportosítás | ||
| ? | előző RE 0 vagy egyszeri ismétlése | "colou?r" | color, colour | 
| * | a megelőző RE 0 vagy többszöri ismétlése (mohó) | "woo*w" | wow, woooooow | 
| + | a megelőző RE 1 vagy többszöri ismétlése (mohó) | "wo+w" | wow, woooooow | 
| *? | a * lusta változata | ||
| +? | a + lusta változata | ||
| {n} | az előző RE pontosan n-szer | "al{2}e{2}" | allee | 
| {n,} | az előző RE legalább n-szer | "wo{3,}w" | wooow, woooow | 
| {,n} | az előző RE legföljebb n-szer | ||
| {n,m} | legalább n-szer, legföljebb m-szer | ||
| \ | a spec. karakterek escape-elésére | 
| Általános karakterosztályok | |
|---|---|
| \d | decimális szám | 
| \D | nem decimális szám, minden más | 
| \s | szóköz karakter | 
| \S | bármely más karakter a szóközön kívül | 
| \w | bármely szókarakter: alfanumerikus karakter vagy aláhúzás | 
| \W | bármi, ami nem szókarakter (nem alfanumerikus és nem aláhúzás) | 
| \b | szóhatár | 
Először be kell töltenünk a re csomagot, mely tartalmazza a python regexp függvényeit:
import re
A re modul néhány függvénye:
| Függvény | Leírás | 
|---|---|
| findall(p, s) | a p minta összes előfordulása az s sztringben | 
| search(p, s) | visszaad egy „match object”-et ha p illeszkedik s egy részére | 
| split(p, s) | elvágja p minden illeszkedésénél az s sztringet, listát ad vissza | 
| sub(p, n, s[, m]) | helyettesíti p-t n-re az s-ben m-szer | 
| finditer(p, s) | "match object"-ek iterálható objektuma | 
A „match object” megadja, hogy a minta hol illeszkedik és mire. Ezt az infot a .span() és a .group() metódus adja vissza.
A karakterláncokban az eszképelt, azaz a \ jellel kezdődő karakterek (\n, \t, \) és a reguláris kifejezések \ jellel kezdődő parancsaiból adódó bizonytalanságok elkerülésére helyesebb, ha a reguláris kifejezések karakterláncait nyers (raw) formában adjuk meg, vagy minden karaktert eszképeljünk. Nyers formában tehát a \ repjelet jelent! Nyers karakterláncot az elé írt r betűvel jelöljük.
nyers = r"aa\txx\s"
nem_nyers = "aa\txx\s"
eszkepelt = "aa\txx\\s"
print("Nyers:     " + nyers)
print("Nem nyers: " + nem_nyers)
print("Eszképelt: " + eszkepelt)
s = "confirmation"
p = ".i"
print(re.findall(p, s))
print(re.search(p, s))
x = re.search(p, s)
print(x.span())
print(x.group())
print(re.split(p, s))
x = re.finditer(p, s)
for y in x:
    print(y.group(), y.span())
s = "Hú, de szép"
p = "([úé])"
print(re.sub(p, r"\1\1\1\1", s))
s = "This 'string' has two 'quoted' words"
p1 = "'.*'"    # mohó, greedy    
p2 = "'.*?'"   # lusta, lazy
print(re.findall(p1, s), "  --> greedy")
print(re.findall(p2, s), "  --> lazy")