Python'дун регулярдуу аныктоолорунда атайын символдорду экрандоо
Атайын символ өзүн өзү билдириши үчүн керек деп коёлу. Бул үчүн аны кайталоочу кесме менен экрандоо керек. Келгиле, мисалдар менен карап көрөлү.
Мисал
Төмөнкү мисалда регулярдуу аныктоонун автору издөө үлгүсү мындай болушун каалады: тамга
'a', андан кийин кошуу белгиси '+', андан кийин тамга 'x'. Бирок, коддун автору
'+' символун экрандаган эмес жана ошондуктан
иш жүзүндө издөө үлгүсү мындай көрүнөт:
тамга 'a' бир же бир нече жолу,
андан кийин тамга 'x':
txt = 'a+x ax aax aaax'
res = re.sub('a+x', '!', txt)
print(res)
Кодду иштетүүнүн натыйжасы:
'a+x ! ! !'
Мисал
Эми автор кошуу белгисин кайталоочу кесме менен экрандады. Эми издөө үлгүсү
керектей көрүнөт: тамга 'a', андан кийин кошуу белгиси
'+', андан кийин тамга 'x':
txt = 'a+x ax aax aaax'
res = re.sub('a\+x', '!', txt)
print(res)
Кодду иштетүүнүн натыйжасы:
'! ax aax aaax'
Мисал
Бул мисалда үлгү мындай көрүнөт:
тамга 'a', андан кийин чекит '.',
андан кийин тамга 'x':
txt = 'a.x abx azx'
res = re.sub('a\.x', '!', txt)
print(res)
Кодду иштетүүнүн натыйжасы:
'! abx azx'
Мисал
Төмөнкү мисалда автор чекитти экрандашты унутуп калды жана регулярдык аныктоо бардык саптык бөлүктөрдү камтыды, анткени экрандалбаган чекит каалаган символду билдирет:
txt = 'a.x abx azx'
res = re.sub('a.x', '!', txt)
print(res)
Кодду иштетүүнүн натыйжасы:
'! ! !'
Эскертүү
Эгер сиз чекит үчүн (ал өзүн өзү билдирүүсү керек болгондо) кайталоочу кесмени унутсаңыз - муну байкоого мүмкүн болбошу мүмкүн экенин белгилеңиз:
res = re.sub('a.x', '!', 'a.x')
print(res) # биз каалагандай '!' кайтарат
Визуалдык түрдө туура иштейт (анткени чекит
каалаган символду, анын ичинде кадимки чекитти '.' билдирет). Бирок эгер
алмаштыруулар жүргүзүлгөн сапты өзгөртсөк - биз
өз катабызды көрөбүз:
res = re.sub('a.x', '!', 'a.x abx azx')
print(res) # '! ! !' кайтарат, бирок '! abx azx' күтүлгөн
Атайын символдордун жана кадимкилердин тизмеси
Эгер кадимки символду экрандасаңыз - эч кандай жамандык болбойт - ал дагы өзүн өзү билдирет. Сандар - тышкаркы, аларды экрандоого болбойт.
Көп учурда бул символ атайын экенин шек туудурат. Кээ бир адамдар бардык шектүү символдорду катары менен экрандай башташат. Бирок, бул жаман практика (регулярдык аныктоону кайталоочу кесмелер менен булгайт).
Атайын символдор болуп саналат: $ ^ . * + ? \ / {} [] () |
Атайын символдор эмес: @ : , ' " - _ = < > % # ~ `& !
Практикалык тапшырмалар
Сап берилген:
txt = 'a.a aba aea'
'a.a' сабын таба турган, калгандарын камтыбаган регулярдык аныктоо жазыңыз.
Сап берилген:
txt = '2+3 223 2223'
'2+3' сабын таба турган, калгандарын камтыбаган регулярдык аныктоо жазыңыз.
Сап берилген:
txt = '23 2+3 2++3 2+++3 345 567'
'2+3', '2++3', '2+++3' саптарын таба турган,
калгандарын камтыбаган регулярдык аныктоо жазыңыз (кошуу белгиси каалаган санда болушу мүмкүн).
Сап берилген:
txt = '23 2+3 2++3 2+++3 445 677'
'23', '2+3', '2++3',
'2+++3' саптарын таба турган, калгандарын камтыбаган регулярдык аныктоо жазыңыз.
Сап берилген:
txt = '*+ *q+ *qq+ *qqq+ *qqq qqq+'
'*q+', '*qq+', '*qqq+' саптарын таба турган,
калгандарын камтыбаган регулярдык аныктоо жазыңыз.
Сап берилген:
txt = '[abc] {abc} abc (abc) [abc]'
Төрт бурчтуу кашаадагы саптарды таап, аларды
'!' менен алмаштыра турган регулярдык аныктоо жазыңыз.