Дефис дар дохили маҷмӯаҳо дар Regular Expression-ҳои 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'.