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:

pythontxt = '1a2 1-2 1c2 1z2'
res = re.sub('1[a-z]2', '!', txt)

print(res)

Kodo vykdymo rezultatas:

python'! 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:

pythontxt = '1a2 1-2 1c2 1z2'
res = re.sub('1[a\-z]2', '!', txt)

print(res)

Kodo vykdymo rezultatas:

python'! ! 1c2 !'

Pavyzdys

Galima tiesiog perstatyti brūkšnelį, neekranuojant jo:

pythontxt = '1a2 1-2 1c2 1z2'
res = re.sub('1[az-]2', '!', txt)

print(res)

Kodo vykdymo rezultatas:

python'! ! 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':

pythontxt = 'axx Axx -xx @xx'
res = re.sub('[a-z-]xx', '!', txt)

print(res)

Kodo vykdymo rezultatas:

python'! 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':

pythontxt = 'axx Axx -xx @xx'
res = re.sub('[a-zA-Z-]xx', '!', txt)

print(res)

Kodo vykdymo rezultatas:

python'! ! ! @xx'

Pavyzdys

Galima brūkšnelį patalpinti tarp dviejų grupių - ten jis tikrai nesukurs dar vienos grupės:

pythontxt = 'axx 9xx -xx @xx'
res = re.sub('[a-z-0-9]xx', '!', txt)

print(res)

Kodo vykdymo rezultatas:

python'! ! ! @xx'

Praktinės užduotys

Задание 1

Duota eilutė:

pythontxt = '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'.

Задание 2

Duota eilutė:

pythontxt = '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'.