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))