Brūkšnelis simbolių rinkiniuose Python reguliariosiose išraiškose
Brūkšnelis - taip pat specialus simbolis [ ] viduje
(tačiau išorėje - ne). Jei jums reikia paties
brūkšnelio kaip simbolio - padėkite jį ten,
kur jis nebus suprastas kaip grupės skirtukas.
Kodėl tai svarbu: galite netyčia sukurti simbolių
grupę. Pavyzdžiui, štai taip - '[:-@]' - jūs manote, kad
pasirenkate dvitaškį, brūkšnelį ir 'eta' ženklą, tačiau
iš tikrųjų susidaro simbolių grupė tarp
: ir @. Į šią grupę įeina
šie simboliai: ? < = > :
Iš kur jie atsirado? Iš ASCII lentelės - dvitaškis turi mažesnį numerį nei 'eta' - ir susidaro grupė. Tai yra, visos grupės susidaro pagal ASCII lentelę (jei norite, galite tuo naudotis).
Kaip su tuo kovoti: padėkite brūkšnelio simbolį
ten, kur jis tikrai nebus suprastas
kaip grupės simbolis, pavyzdžiui, pradžioje arba
pabaigoje (tai yra po [ arba prieš
]).
Taip pat galite ekranuoti brūkšnelį - tada
jis reikš save patį nepriklausomai
nuo padėties. Pavyzdžiui, vietoj [:-@]
parašyti [:\-@] - ir grupės jau nebus,
o bus trys simboliai - dvitaškis,
brūkšnelis ir 'eta' ženklas @.
Pavyzdys
Šiame pavyzdyje paieškos šablonas toks:
skaitmuo 1, tada raidė nuo 'a'
iki 'z', tada skaitmuo 2:
txt = '1a2 1-2 1c2 1z2'
res = re.sub('1[a-z]2', '!', txt)
print(res)
Kodo vykdymo rezultatas:
'! 1-2 ! !'
Pavyzdys
Dabar ekranuokime brūkšnelį.
Rezultate paieškos šablonas toks: skaitmuo
1, tada raidė 'a', arba
brūkšnelis, arba raidė 'z', tada skaitmuo
2:
txt = '1a2 1-2 1c2 1z2'
res = re.sub('1[a\-z]2', '!', txt)
print(res)
Kodo vykdymo rezultatas:
'! ! 1c2 !'
Pavyzdys
Galima tiesiog perstatyti brūkšnelį, neekranuojant jo:
txt = '1a2 1-2 1c2 1z2'
res = re.sub('1[az-]2', '!', txt)
print(res)
Kodo vykdymo rezultatas:
'! ! 1c2 !'
Pavyzdys
Šiame pavyzdyje paieškos šablonas toks:
pirmas simbolis - tai mažosios raidės arba
brūkšnelis '-', po to dvi raidės
'x':
txt = 'axx Axx -xx @xx'
res = re.sub('[a-z-]xx', '!', txt)
print(res)
Kodo vykdymo rezultatas:
'! Axx ! @xx'
Pavyzdys
Šiame pavyzdyje paieškos šablonas toks:
pirmas simbolis - tai mažosios, didžiosios
raidės arba brūkšnelis '-', po to dvi raidės
'x':
txt = 'axx Axx -xx @xx'
res = re.sub('[a-zA-Z-]xx', '!', txt)
print(res)
Kodo vykdymo rezultatas:
'! ! ! @xx'
Pavyzdys
Galima brūkšnelį patalpinti tarp dviejų grupių - ten jis tikrai nesukurs dar vienos grupės:
txt = 'axx 9xx -xx @xx'
res = re.sub('[a-z-0-9]xx', '!', txt)
print(res)
Kodo vykdymo rezultatas:
'! ! ! @xx'
Praktinės užduotys
Duota eilutė:
txt = 'xaz xBz xcz x-z x@z'
Raskite visas eilutes pagal šį šabloną:
raidė 'x', didžioji arba mažoji
raidė arba brūkšnelis, raidė 'z'.
Duota eilutė:
txt = 'xaz x$z x-z xcz x+z x%z x*z'
Raskite visas eilutes pagal šį šabloną:
raidė 'x', tada arba dolerio ženklas, arba
brūkšnelis arba pliuso ženklas, po to raidė 'z'.