Defisks regulāro izteiksmju kopās Python
Defisks - arī ir speciāls simbols iekš [ ]
(ārpus tiem - nav). Ja jums vajag pašu
defisku kā simbolu - tad novietojiet to tur,
kur tas netiks uztverts kā grupas
atdalītājs.
Kāpēc tas ir svarīgi: jūs varat neievērojot izveidot simbolu
grupu. Piemēram,
šādi - '[:-@]' - jūs domājat, ka
izvēlaties kolu, defisku un @ simbolu, bet
patiesībā izveidojas simbolu grupa starp
: un @. Šajā grupā ietilpst
šādi simboli: ? < = > :
No kurienes tie nāk? No ASCII tabulas - kolas simbolam ir mazāks numurs nekā @ - un veidojas grupa. Tas ir, visas grupas veidojas pēc ASCII tabulas (ja vēlas, to var izmantot).
Kā ar to cīnīties: novietojiet simbola
defisku tur, kur tas noteikti netiks uztverts
kā grupas simbols, piemēram, sākumā vai
beigās (tas ir, aiz [vai pirms
]).
Var arī ekrānēt defisku - tad
tas apzīmēs pats sevi neatkarīgi
no pozīcijas. Piemēram, [:-@] vietā
rakstīt [:\-@] - un grupas vairs
nebūs, bet būs trīs simboli - kols,
defisks un @ simbols @.
Piemērs
Nākamajā piemērā meklēšanas šablons ir šāds:
cipars 1, tad burts no 'a'
līdz 'z', tad cipars 2:
txt = '1a2 1-2 1c2 1z2'
res = re.sub('1[a-z]2', '!', txt)
print(res)
Koda izpildes rezultāts:
'! 1-2 ! !'
Piemērs
Tagad ekrānēsim defisku.
Rezultātā meklēšanas šablons ir šāds: cipars
1, tad burts 'a', vai
defisks, vai burts 'z', tad cipars
2:
txt = '1a2 1-2 1c2 1z2'
res = re.sub('1[a\-z]2', '!', txt)
print(res)
Koda izpildes rezultāts:
'! ! 1c2 !'
Piemērs
Var vienkārši pārkārtot defisku, neekrānējot to:
txt = '1a2 1-2 1c2 1z2'
res = re.sub('1[az-]2', '!', txt)
print(res)
Koda izpildes rezultāts:
'! ! 1c2 !'
Piemērs
Nākamajā piemērā meklēšanas šablons ir šāds:
pirmais simbols - mazie burti vai
defisks '-', tad divi burts
'x':
txt = 'axx Axx -xx @xx'
res = re.sub('[a-z-]xx', '!', txt)
print(res)
Koda izpildes rezultāts:
'! Axx ! @xx'
Piemērs
Nākamajā piemērā meklēšanas šablons ir šāds:
pirmais simbols - mazie, lielie
burti vai defisks '-', tad divi burts
'x':
txt = 'axx Axx -xx @xx'
res = re.sub('[a-zA-Z-]xx', '!', txt)
print(res)
Koda izpildes rezultāts:
'! ! ! @xx'
Piemērs
Var novietot defisku starp divām grupām - tur tas noteikti vēl neizveidos vēl vienu grupu:
txt = 'axx 9xx -xx @xx'
res = re.sub('[a-z-0-9]xx', '!', txt)
print(res)
Koda izpildes rezultāts:
'! ! ! @xx'
Praktiskie uzdevumi
Dota virkne:
txt = 'xaz xBz xcz x-z x@z'
Atrodiet visas virknes pēc šāda šablona:
burts 'x', lielais vai mazais
burts vai defisks, burts 'z'.
Dota virkne:
txt = 'xaz x$z x-z xcz x+z x%z x*z'
Atrodiet visas virknes pēc šāda šablona:
burts 'x', tad vai nu dolāra zīme, vai
defisks vai plus zīme, tad burts 'z'.