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' әрпі.