Маҳдуд кардани ҳарисӣ дар Regular Expression дар Python
Regular Expression-ҳо тавре ки пешфарз ҳастанд ҳарис мебошанд. Ин маънои онро дорад, ки онҳо максимум тавон миқдори аломатҳоро мегиранд. Биёед мисол таҳлил кунем. Фарз кунем, ки мо чунин сатр дорем:
txt = 'aeeex zzz x kkk'
Дар ин сатр мехоҳем зерсатри
'aeeex'-ро бо истифода аз қоидаи зерин ёбем:
ҳарф 'a', сипас ягон аломат
як ё зиёда маротиба, сипас ҳарф 'x':
res = re.sub('a.+x', '!', txt)
print(res)
Ҳарчанд мо бояд сатр '! zzz
x kkk'-ро гирем, сатр '! kkk' чоп карда мешавад.
Ҳамаи кор ин аст, ки Regular Expression-и мо ҳамаи
аломатҳоро аз ҳарфи 'a' то ҳарфи
'x' меҷӯяд. Аммо дар сатри мо ду ҳарфи
'x' ҳаст! Бинобар ҳарисӣ чунин мешавад, ки
Regular Expression то охирин ҳарфи 'x' ҷустуҷӯ мекунад,
ва аз ин рӯ он чиро ки мо лозим доштем намегирад.
Албатта, аксар вақт ин рафтор барои мо зарур аст. Вале маҳз дар ин ҳолат лозим аст ҳарисӣ лағв карда шавад ва ба Regular Expression гуфта шавад, ки то аввалин 'x' ҷустуҷӯ кунад. Дар ин ҳолат бояд баъд аз оператори такрор аломати савол гузошта шавад:
res = re.sub('a.+?x', '!', txt)
print(res) # сатр '! zzz x kkk'-ро чоп мекунад
Ҳарисӣ ба ҳамаи операторҳои такрор маҳдуд кардан мумкин аст:
ҳам *, ва ?, ва
{} - ба ин тавр: *?, ??
ва {}?.
Сатр дода шудааст:
txt = 'aba accca azzza wwwwa'
Regular Expression-еро нависед, ки ҳамаи
сатрҳоеро ёбад, ки дар канораҳояшон ҳарфҳои
'a' истодаанд, ва ҳар яке аз онҳоро ба
'!' иваз кунад. Байни ҳарфҳои 'a' метавонад
ягон аломат (ба истиснои 'a') бошад.