Néhány hasznos (és kevésbe hasznos) speciális karakter:
uj_sor = "\n" #
horizontalis_tab = "\t" # vizszintes tabulator
rep = "\\" # forditott per
egyes_idezojel = "\'" # '
kettes_idezojel = "\"" # "
############################# a regi teletype-okon meg hasznos volt
sipolo_karakter = "\a" # csengo (mar nem minden verzio tamogatja)
kocsi_vissza = "\r" # a sor elejere ugrik, de nem emel sort
vertikalis_tab = "\v" #
Egy példa a \n és \t használatára:
print "Tablazat:\n\n Honnan\tHova\n-------------------------\n innen \toda"
Részsztring:
s = "Elsomasodikharmadik"
print s[:4]
print s[4:11]
print s[11:]
Összefűzés (karakterláncot csak karakterlánccal lehet összeadni):
s = "kiskutya"
print "5 " + s
print 5 + s
s = "kiskutya"
mennyiseg = 5
print str(mennyiseg) + " " + s
s = "hol KIS-, hol NAGYbetuk"
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()
Csak az ábécé betűit tartalmazza-e (emlékeztető: a szóköz nem az ábécé betűje):
s.isalpha()
split
¶Ha egy részsztring pontos helyét is tudni akarjuk:
'betu' in s
s.find('betu')
Karakterlánc felbontása megadott szeparátor karakter segítségével (ha a szeparátor nincs megadva, nem látható karaktereknél vág szét). Eredményül visszakapjuk a részsztringek listáját:
s.split() # szokozokkel szavakra vagjuk
s = "elso masodik\tharmadik\nnegyedik"
s.split()
s = "elso, masodik, harmadik, negyedik"
s.split(", ") # itt egy vesszo es egy szokoz is van!
strip
¶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 szokozok \t \n\n '
s.strip()
s = "...vesszovel kezdodik es ponttal vegzodik vagy forditva,"
print s.strip(".,") # mindket vegerol
print s.rstrip(".,") # csak jobbrol torol
print s.lstrip(".,") # csak balrol torol
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ő:
tablazat = [["Elso sor", -2, -310], ["Masodik sor", 3, 1], ["Harmadik sor",-321, 11]]
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
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:b}".format(42)
"{0}, {0:e}, {0:f}, {0:8.4f}, {0:15.1f}".format(-12.345)
'A kozeppont: ({x}, {y})'.format(x=3, y=5)
x1 = 3; y1 = 4
print 'A kozeppont: ({x}, {y})'.format(x=x1, y=y1)
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
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. Ezek egyike a regex101.com.
A reguláris kifejezésekben használt metakarakterek: . ^ $ * + ? { } [ ] ( ) \ |
Jel | Neve | Jelentése (mire illeszkedik) |
---|---|---|
. | pont | bármely karakterre illeszkedik, kivéve az új sor karaktert |
^ | kalap | a minta elejére illeszkedik |
$ | dollár | a minta végére illeszkedik |
| | pipa | logikai vagy a környező RE-ekre |
[] | szögletes zárójel | karakter osztály, a szögletes zárójelek közötti karakterek valamelyikeire bármilyen sorrendben illeszkedik |
[^ab@] | tagadás | bármi, kivéve a, b vagy @ |
[0-6] | tartomány | 0 és 6 közötti számokra illeszkedik |
[a-fA-F] | tartomány | ASCII kis és nagy betűkre illeszkedik a-tól f-ig |
() | kerek zárójel | hivatkozható csoportosítás |
* | csillag | a megelőző RE 0 vagy többszöri ismétlése |
+ | plusz | a megelőző RE 1 vagy többszöri ismétlése |
? | kérdőjel | az előző RE 0 vagy egyszeri ismétlése |
{3} | kapcsos | a mintában pontosan három karakter lehet |
{3,} | kapcsos | a mintában legalább három vagy több karakter lehet |
{,3} | intervallum | a mintában legfeljebb három karakter lehet |
{1,4} | intervallum | a mintában legalább egy, legfeljebb négy karakter lehet |
\ | rep | 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
Majd a findall
függvénnyel megkereshetjük egy karakterláncban az összes részláncot, mely illeszkedik egy megadott reguláris kifejezésre:
pattern = r'[0-9]+\s[a-z]+'
string = "volt egyszer 25 kiskutya, elmentek 13 varosba"
print re.findall(pattern, string)
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. A fenti példa működne nem nyersen is, mert a \s nem eszkép karakter:
nyers = r"aa\txx\s"
nem_nyers = "aa\txx\s"
eszkepelt = "aa\txx\\s"
print "Nyers: " + nyers
print "Nem nyers: " + nem_nyers
print "Eszkepelt: " + eszkepelt
Nézzük még meg hogyan tudunk lecserélni megtalált részeket stringekben:
mit = r'[0-9]+\s[a-z]+'
mire = r'12 majom'
miben = "volt egyszer 25 kiskutya, elmentek 13 varosba"
print re.sub(mit, mire, miben)
Most \1
-el hivatkozunk a () zárójelek közt megtalált részre:
mit = r'[0-9]+\s([a-z]+)'
mire = r'12 \1'
miben = "volt egyszer 25 kiskutya, elmentek 13 varosba"
print re.sub(mit, mire, miben)
Több dologra is lehet hivatkozni: \2
, \3
,...
mit = r'([0-9]+)\s([a-z]+)'
mire = r'talan \1 \2'
miben = "volt egyszer 25 kiskutya, elmentek 13 varosba"
print re.sub(mit, mire, miben)