s1 = """Volt egyszer egy kiskutya.
Elment a vasarba.
Harmadik sor."""
print s1
Ugyanez sima "
-el:
s2 = "Volt egyszer egy kiskutya.\nElment a vasarba.\nHarmadik sor."
print s2
Tehát a \n
jelenti a sortörést a stringekben. Ez majdnem minden programnyelvben így van.
Néhány hasznos (és kevésbe hasznos) hasonló speciális karakter:
sipolo_karakter = "\a" # manapság már nem támogatott :(
uj_sor = "\n"
kocsi_vissza = "\r"
horizontalis_tab = "\t" # ez az amit ismertek
vertikalis_tab = "\v" # ez az amit nem
forditott_per = "\\"
egyes_idezojel = "\'"
kettes_idezojel = "\""
A vicceseken kívül érdemes ezeket ismerni. (Vicces: \a, \r, \v)
A tab kényelmessé tesz mátrixot kiírni például:
matrix = [[1, -2, 30], [4, 3, 1], [-21, 23, 11]]
for sor in matrix:
for elem in sor:
print elem, "\t",
print ""
s = "Elsomasodikharmadik"
print s[:4]
print s[4:11]
print s[11:]
Összefûzés is volt már említve, vigyázzunk, hogy stringet csak stringgel lehet összeadni!
s = "kiskutya"
print "5 " + s
s = "kiskutya"
mennyiseg = 5
print mennyiseg + s
s = "kiskutya"
mennyiseg = 5
print str(mennyiseg) + " " + s
Tehát az str
függvénnyel tudunk változókat stringgé alakítani.
s = "pelda mondat Taylor Swift"
Nagybetûvel kezdés:
s.capitalize()
Csupa nagybetûvé tevés:
s.upper()
Csupa kisbetûvé 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()
s = "egy kiskutya"
s.center(30)
s.rjust(30)
s.ljust(30)
A paraméterként átadott érték szabályozza a létrejött string hosszát.
Nézzük meg a mátrixot újra:
matrix = [[1, -2, 30], [4, 3, 1], [-21, 23, 11]]
matstr = ""
for sor in matrix:
for elem in sor:
matstr += str(elem).rjust(5)
matstr += "\n"
print matstr
Amikor fájlmûveleteket végzünk hasznos lehet:
felesleges = """
felesleges sortoressel es szokozokkel nyitunk es vegzunk
"""
print felesleges
print felesleges.strip()
print felesleges.rstrip()
print felesleges.lstrip()
matrix = [[1, -2, 30], [4, 3, 1], [-21, 23, 11]]
matstr = ""
for sor in matrix:
for elem in sor:
matstr += "{0:5d}".format(elem)
matstr += "\n"
print matstr
Itt az elsõ szám a format
paraméterének indexét jelzi, a kettõspont után vannak a formázási paraméterek. Elég a d
-t ismerni.
Egy másik példa:
for x in range(1,6):
print '| {0:2d} | {1:3d} | {2:4d} |'.format(x, x*x, x*x*x)
Ami érdekes, hogy lehet névszerint is hivatkozni a formázottban lévõ elemekre, pl:
print 'A középpont: ({x}, {y})'.format(x=3, y=5)
Mintaillesztésrõl van szó. Szeretnénk olyan kifejezéseket gyártani, amik különbözõ stringekre igazak, követve valamilyen mintát. Például valid emailcímek.
. (pont) – bármely, kivéve az új sor karakter
^ (kalap jel) – a minta kezdete
$ (dollár jel) – a minta vége
| (pipa) – logikai elágazás, előtte vagy utána levő kifejezés
[] (szögletes zárójel) – karakter osztály, a szögletes zárójelek közötti karakterek valamelyikeire bármilyen sorrendben illeszkedik
() (kerek zárójel) – csoportosítás, a kerek zárójelek közötti karakterekre pontos sorrendben illeszkedik
[^ab@] (tagadás a karakter osztályban) – bármi, kivéve a, b vagy @
[0-6] (karakter osztály tartomány) – 0 és 6 közötti számokra illeszkedik
[a-fA-F] (karakter osztály tartomány) – ASCII kis és nagy betűkre illeszkedik a-tól f-ig
* (csillag) – a minta 0 vagy többszöri ismétlése
+ (plusz) – a minta 1 vagy többszöri ismétlése
? (kérdőjel) – a minta 0 vagy egyszeri ismétlése
{3} (intervallum) – a mintában pontosan három karakter lehet
{3,} (intervallum) – 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
\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ó
\W bármi, ami nem szó
Itt is mint korábban, ha pl . (pont)-ot akarunk írni akkor fordított per jellel kell escape-elni:
\.
Néggyel osztható 2 jegyû számok:
[02468][048]|[13579][26]
Email (nem tökéletes):
\W+@\W+\.\W+
Bármely lebegõpontos szám:
^[+-]?(\d+(\.\d+)?|\.\d+)([eE][+-]?\d+)?$
Nagy betűkkel írt római számok:
M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})
3 darab hexadecimális szám egymás után pl:
A34DC8
yyyy-mm-dd formátumban
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 megkereshetünk egy stringben minden elõfordulását a mintának:
pattern = r'[0-9]+\s[a-z]+'
string = "volt egyszer 25 kiskutya, elmentek a 13 varosba"
print re.findall(pattern, string)
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 a 13 varosba"
print re.sub(mit, mire, miben)
Most kicsit bonyolultabban \1
-el hivatkozok 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 a 13 varosba"
print re.sub(mit, mire, miben)
Ha több dologra is szeretnénk hivatkozni, akkor \2
a második és így tovább:
mit = r'([0-9]+)\s([a-z]+)'
mire = r'majdnem \1 \2'
miben = "volt egyszer 25 kiskutya, elmentek a 13 varosba"
print re.sub(mit, mire, miben)