Цртица унутар скупа у регуларним изразима Пајтона
Цртица је такође специјални симбол унутар [ ]
(али напољу - није). Ако вам је потребна сама
цртица као симбол - ставите је тамо,
где се неће схватити као раздвајач
групе.
Зашто је ово важно: можете направити групу
симбола, сами то не приметивши. На пример,
овако - '[:-@]' - мислите да
бирате двотачку, цртицу и мајмунчић, а у
ствари добија се група симбола између
: и @. У ову групу спадају
следећи симболи: ? < = > :
Одакле они долазе? Из табеле 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'.