Koppelteken binne versamelings in Python gereelde uitdrukkings
Koppelteken is ook 'n spesiaale karakter binne [ ]
(maar buite - nie). As jy die koppelteken self as 'n karakter nodig het
- plaas dit dan waar dit nie as 'n groepskeerder beskou sal word nie.
Hoekom dit belangrik is: jy kan per ongeluk 'n groep karakters skep.
Byvoorbeeld, so - '[:-@]' - dink jy jy kies 'n dubbelpunt, koppelteken en 'n apenstaartjie (at),
maar eintlik kry jy 'n groep karakters tussen
: en @. Hierdie groep sluit die volgende karakters in:
? < = > :
Waar kom hulle vandaan? Van die ASCII-tabel - die dubbelpunt het 'n laer nommer as die apenstaartjie (at) - en dit word 'n groep. Al groepe word gevorm volgens die ASCII-tabel (as jy wil, kan jy dit gebruik).
Hoe om dit te hanteer: plaas die koppelteken karakter
waar dit definitief nie as 'n groepkarakter beskou sal word nie,
byvoorbeeld aan die begin of
aan die einde (dit wil sê, na [ of voor
]).
Jy kan ook die koppelteken ontsnap (escape) - dan
sal dit homself verteenwoordig ongeag
die posisie. Byvoorbeeld, in plaas van [:-@]
skryf [:\-@] - en daar sal nie 'n groep wees nie,
maar drie karakters - dubbelpunt,
koppelteken en apenstaartjie @.
Voorbeeld
In die volgende voorbeeld is die soekpatroon soos volg:
syfer 1, dan 'n letter van 'a'
tot 'z', dan syfer 2:
txt = '1a2 1-2 1c2 1z2'
res = re.sub('1[a-z]2', '!', txt)
print(res)
Resultaat van die kode-uitvoering:
'! 1-2 ! !'
Voorbeeld
Kom ons ontsnap nou die koppelteken. In
die gevolg is die soekpatroon soos volg: syfer
1, dan letter 'a', of
koppelteken, of letter 'z', dan syfer
2:
txt = '1a2 1-2 1c2 1z2'
res = re.sub('1[a\-z]2', '!', txt)
print(res)
Resultaat van die kode-uitvoering:
'! ! 1c2 !'
Voorbeeld
Jy kan die koppelteken net herskik sonder om dit te ontsnap:
txt = '1a2 1-2 1c2 1z2'
res = re.sub('1[az-]2', '!', txt)
print(res)
Resultaat van die kode-uitvoering:
'! ! 1c2 !'
Voorbeeld
In die volgende voorbeeld is die soekpatroon soos volg:
eerste karakter is klein letters of
koppelteken '-', dan twee letters
'x':
txt = 'axx Axx -xx @xx'
res = re.sub('[a-z-]xx', '!', txt)
print(res)
Resultaat van die kode-uitvoering:
'! Axx ! @xx'
Voorbeeld
In die volgende voorbeeld is die soekpatroon soos volg:
eerste karakter is klein letters, hoofletters
of koppelteken '-', dan twee letters
'x':
txt = 'axx Axx -xx @xx'
res = re.sub('[a-zA-Z-]xx', '!', txt)
print(res)
Resultaat van die kode-uitvoering:
'! ! ! @xx'
Voorbeeld
Jy kan die koppelteken tussen twee groepe plaas - daar sal dit definitief nie nog 'n groep vorm nie:
txt = 'axx 9xx -xx @xx'
res = re.sub('[a-z-0-9]xx', '!', txt)
print(res)
Resultaat van die kode-uitvoering:
'! ! ! @xx'
Praktiese take
Gegewe string:
txt = 'xaz xBz xcz x-z x@z'
Vind al die strings volgens die volgende patroon:
letter 'x', hoofletter of kleinletter
of koppelteken, letter 'z'.
Gegewe string:
txt = 'xaz x$z x-z xcz x+z x%z x*z'
Vind al die strings volgens die volgende patroon:
letter 'x', dan of dollarteken, of
koppelteken of plusteken, dan letter 'z'.