Злучок унутры набораў у рэгулярках Python
Злучок - таксама спецсімвал унутры [ ]
(а вось звонку - не). Калі вам патрэбны сам
злучок як сімвал - то пастаўце яго там,
дзе ён не будзе ўспрыняты як падзельнік
групы.
Чаму гэта важна: вы можаце зрабіць групу
сімвалаў, самі не заўважыўшы гэтага. Напрыклад,
вось так - '[:-@]' - вы думаеце, што
выбіраеце двукроп'е, злучок і сабаку, а на
самым справе атрымліваецца група сімвалаў паміж
: і @. У гэтую групу ўваходзяць
наступныя сімвалы: ? < = > :
Адкуль яны ўзяліся? З табліцы ASCII - двукроп'е мае нумар меншы, чым сабака - і атрымліваецца група. Гэта значыць усе групы атрымліваюцца па табліцы ASCII (пры жаданні гэтым можна карыстацца).
Як з гэтым змагацца: пастаўце сімвал
злучока там, дзе ён дакладна не будзе ўспрыняты
як сімвал групы, напрыклад, у пачатку або
ў канцы (гэта значыць пасля [або перад
]).
Можна таксама заэкранаваць злучок - тады
ён будзе абазначаць сам сябе незалежна
ад пазіцыі. Напрыклад, замест [:-@]
напісаць [:\-@] - і групы ўжо не
будзе, а будуць тры сімвалы - двукроп'е,
злучок і сабака @.
Прыклад
У наступным прыкладзе шаблон пошуку такі:
лічба 1, затым літара ад 'a'
да 'z', затым лічба 2:
txt = '1a2 1-2 1c2 1z2'
res = re.sub('1[a-z]2', '!', txt)
print(res)
Вынік выканання кода:
'! 1-2 ! !'
Прыклад
Давайце цяпер заэкрануем злучок. У
выніку шаблон пошуку такі: лічба
1, затым літара 'a', або
злучок, або літара 'z', затым лічба
2:
txt = '1a2 1-2 1c2 1z2'
res = re.sub('1[a\-z]2', '!', txt)
print(res)
Вынік выканання кода:
'! ! 1c2 !'
Прыклад
Можна проста пераставіць злучок, не экранаваўшы яго:
txt = '1a2 1-2 1c2 1z2'
res = re.sub('1[az-]2', '!', txt)
print(res)
Вынік выканання кода:
'! ! 1c2 !'
Прыклад
У наступным прыкладзе шаблон пошуку такі:
першы сімвал - гэта маленькія літары або
злучок '-', потым дзве літары
'x':
txt = 'axx Axx -xx @xx'
res = re.sub('[a-z-]xx', '!', txt)
print(res)
Вынік выканання кода:
'! Axx ! @xx'
Прыклад
У наступным прыкладзе шаблон пошуку такі:
першы сімвал - гэта маленькія, вялікія
літары або злучок '-', потым дзве літары
'x':
txt = 'axx Axx -xx @xx'
res = re.sub('[a-zA-Z-]xx', '!', txt)
print(res)
Вынік выканання кода:
'! ! ! @xx'
Прыклад
Можна размясціць злучок паміж двума групамі - там ён дакладна яшчэ не зробіць яшчэ адну групу:
txt = 'axx 9xx -xx @xx'
res = re.sub('[a-z-0-9]xx', '!', txt)
print(res)
Вынік выканання кода:
'! ! ! @xx'
Практычныя задачы
Дадзены радок:
txt = 'xaz xBz xcz x-z x@z'
Знайдзіце ўсе радкі па наступным шаблоне:
літара 'x', вялікая або маленькая
літара або злучок, літара 'z'.
Дадзены радок:
txt = 'xaz x$z x-z xcz x+z x%z x*z'
Знайдзіце ўсе радкі па наступным шаблоне:
літара 'x', затым або долар, або
злучок або плюс, потым літара 'z'.