A kötőjel a Python reguláris kifejezéseinek halmazaiban
A kötőjel - szintén speciális karakter a [ ] belsejében
(kívül azonban - nem). Ha magára a kötőjelre van szüksége
karakterként - akkor helyezze oda,
ahol nem fogják csoportelválasztóként
értelmezni.
Miért fontos ez: létrehozhat egy karaktercsoportot,
anélkül, hogy észrevenné. Például
így - '[:-@]' - Ön azt hiszi, hogy
kettőspontot, kötőjelet és kukacot választ ki, de
valójában a karakterek csoportja jön létre
a : és a @ között. Ebbe a csoportba
a következő karakterek tartoznak: ? < = > :
Honnan származnak? Az ASCII táblából - a kettőspontnak kisebb a sorszáma, mint a kukacnak - és így jön létre egy csoport. Vagyis minden csoport az ASCII tábla szerint jön létre (szükség esetén ezt ki lehet használni).
Hogyan kezeljük ezt: helyezze a
kötőjel karaktert oda, ahol biztosan nem fogják
csoportkarakterként értelmezni, például az elején vagy
a végén (vagyis a [ után vagy a
] elött).
A kötőjelet escape-elni is lehet - ekkor
önmagát fogja jelenteni, függetlenül
a helyzetétől. Például a [:-@] helyett
írja a [:\-@] - és már nem lesz csoport,
hanem három karakter lesz - kettőspont,
kötőjel és kukac @.
Példa
A következő példában a keresési minta a következő:
1 számjegy, majd 'a'-tól
'z'-ig betű, majd 2 számjegy:
txt = '1a2 1-2 1c2 1z2'
res = re.sub('1[a-z]2', '!', txt)
print(res)
A kód végrehajtásának eredménye:
'! 1-2 ! !'
Példa
Most escape-eljük a kötőjelet. Ennek
eredményeként a keresési minta a következő:
1 számjegy, majd 'a' betű, vagy
kötőjel, vagy 'z' betű, majd 2 számjegy:
txt = '1a2 1-2 1c2 1z2'
res = re.sub('1[a\-z]2', '!', txt)
print(res)
A kód végrehajtásának eredménye:
'! ! 1c2 !'
Példa
Egyszerűen áthelyezhetjük a kötőjelet anélkül, hogy escape-elnénk:
txt = '1a2 1-2 1c2 1z2'
res = re.sub('1[az-]2', '!', txt)
print(res)
A kód végrehajtásának eredménye:
'! ! 1c2 !'
Példa
A következő példában a keresési minta a következő:
az első karakter kisbetűk vagy
kötőjel '-', majd két 'x' betű:
txt = 'axx Axx -xx @xx'
res = re.sub('[a-z-]xx', '!', txt)
print(res)
A kód végrehajtásának eredménye:
'! Axx ! @xx'
Példa
A következő példában a keresési minta a következő:
az első karakter kis- vagy nagybetűk
vagy kötőjel '-', majd két 'x' betű:
txt = 'axx Axx -xx @xx'
res = re.sub('[a-zA-Z-]xx', '!', txt)
print(res)
A kód végrehajtásának eredménye:
'! ! ! @xx'
Példa
A kötőjelet két csoport közé is helyezhetjük - ott biztosan nem fog még egy csoportot létrehozni:
txt = 'axx 9xx -xx @xx'
res = re.sub('[a-z-0-9]xx', '!', txt)
print(res)
A kód végrehajtásának eredménye:
'! ! ! @xx'
Gyakorlati feladatok
Adott egy sztring:
txt = 'xaz xBz xcz x-z x@z'
Keresse meg az összes sztringet a következő minta szerint:
'x' betű, nagy- vagy kisbetű
vagy kötőjel, 'z' betű.
Adott egy sztring:
txt = 'xaz x$z x-z xcz x+z x%z x*z'
Keresse meg az összes sztringet a következő minta szerint:
'x' betű, majd vagy dollár, vagy
kötőjel vagy plusz, majd 'z' betű.