Цртичка внутри множества во регуларните изрази на 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'.