Python 3 үчүн Re модулунун документтери. Регулярдуу туюнтмалар үчүн Re модулу

Регулярдуу туюнтмалар дээрлик бардык программалоо тилинин абдан популярдуу компоненти болуп саналат. Алар сизге керектүү маалыматка тез жетүүгө жардам берет. Тактап айтканда, алар текстти иштетүү зарыл болгондо колдонулат. Python демейки боюнча атайын модулу менен келет. re, ал туруктуу сөз айкаштары менен иштөө үчүн жооптуу.

Бүгүн биз жалпысынан эмне, алар менен кантип иштөө жана модулу жөнүндө кеңири сүйлөшөбүз re жардам берет.

Регулярдуу сөз айкаштары: кириш сөз

Туруктуу сөз айкаштары кандай колдонулат? Дээрлик баары. Мисалы, булар:

  1. Текстти текшерүүнү талап кылган веб-тиркемелер. Кадимки мисал онлайн почта кардарлары болуп саналат.
  2. Тексттерге, маалымат базаларына жана башкаларга байланыштуу башка долбоорлор.

Синтаксисти талдоону баштоодон мурун, китепкананын иштешинин негизги принциптерин тереңирээк түшүнүшүбүз керек. re жана жалпысынан, бул жөнүндө жалпысынан эмне жакшы. Биз ошондой эле реалдуу практикадан мисалдарды келтиребиз, анда биз аларды колдонуу механизмин сүрөттөп беребиз. Сиз текст менен ар кандай операцияларды аткарууга ылайыктуу ушундай шаблонду түзө аласыз.

Re китепканасындагы шаблон деген эмне?

Анын жардамы менен сиз башка функцияларды ыңгайлаштыруу үчүн ар кандай типтеги маалыматты издеп, аларга ылайыктуу маалыматты ала аласыз. Жана, албетте, бул маалыматтарды иштеп чыгуу үчүн.

Мисалы, төмөнкү шаблонду алгыла: s+. Бул кандайдыр бир мейкиндик белгини билдирет. Эгер сиз ага плюс белгисин кошсоңуз, анда бул үлгү бирден ашык мейкиндикти камтыйт дегенди билдирет. Ал атүгүл менен чакырылган өтмөк белгилерине дал келет t+.

Аларды колдонуудан мурун китепкананы импорттоо керек Re. Андан кийин биз шаблонду түзүү үчүн атайын буйрукту колдонобуз. Бул эки этапта жүргүзүлөт.

>>> импорттоо

>>> regex = re.compile('s+')

Тактап айтканда, бул код колдонулушу мүмкүн болгон шаблонду түзүү операциясын аткарат. мисалы, боштуктарды издөө үчүн (бир же бир нече).

Туруктуу сөз айкаштарын колдонуу менен ар кандай саптардан өзүнчө маалымат алуу

Бизде төмөнкү маалыматты камтыган өзгөрмө бар дейли.

>>> text = “””100 INF Информатика

213 МАТ Математика  

156 ENG Кыргызча»»»

Ал үч окуу курсун камтыйт. Алардын ар бири үч бөлүктөн турат - номер, код жана аты. Бул сөздөрдүн ортосундагы интервал ар башка экенин көрөбүз. Бул сапты өзүнчө сандарга жана сөздөргө бөлүү үчүн эмне кылуу керек? Бул максатка жетүү үчүн эки ыкма бар:

  1. функцияны чакырыңыз re.split.
  2. функцияны колдонуу жаруу үчүн regex.

Бул жерде биздин өзгөрмө үчүн ыкмалардын ар биринин синтаксисин колдонуунун мисалы келтирилген.

>>> re.split('s+', текст)  

# же

>>> regex.split(текст)

Чыгуу: ['100', 'INF', 'Информатика', '213', 'MAT', 'Math', '156', 'ENG', 'English']

Жалпысынан алганда, эки ыкманы колдонсо болот. Бирок функцияны бир нече жолу колдонуунун ордуна кадимки туюнтманы колдонуу чындыгында алда канча оңой. re.split.

Үч функция менен дал келүүлөрдү табуу

Биз саптан сандарды гана чыгарышыбыз керек дейли. Бул үчүн эмне кылуу керек?

re.findall()

Бул жерде функцияны колдонуу учуру findall(), ал кадимки туюнтмалар менен бирге текст өзгөрмөсүнөн бир же бир нече сандын көрүнүштөрүн бөлүп алууга мүмкүндүк берет.

>>> басып чыгаруу (текст)  

100 INF Информатика

213 МАТ Математика  

156 KAZ Кыргызча

>>> regex_num = re.compile('d+')  

>>> regex_num.findall(текст)  

['100', '213', '156']

d символу менен бирге биз өзгөрмө же текстте жайгашкан ар кандай сандык маанини көрсөткөн шаблонду колдондук. Жана биз ал жерге бир + кошкондуктан, бул жок дегенде бир сан болушу керек дегенди билдирет. 

Сиз ошондой эле * белгисин дал келүү үчүн сандын болушу талап кылынбагандыгын көрсөтүү үчүн колдоно аласыз.

Бирок биздин учурда, биз + колдонгондуктан, биз менен чыгардык findall() Тексттен курстардын 1 же андан көп санариптик белгилер. Ошентип, биздин учурда, туруктуу сөз айкаштары функциянын орнотуулары катары иштейт.

re.search() vs re.match()

Функциялардын атынан болжолдоого ылайык, биринчи тексттен дал келүүнү издейт. Суроо: ортосунда кандай айырма бар findall? Кеп, ал мурунку функция сыяктуу тизме түрүндөгү табылган натыйжалардын бүт ырааттуулугун эмес, үлгүгө дал келген белгилүү бир объектти кайтарып берет.

Өз кезегинде, re.match функциясы да ушундай кылат. Бир гана синтаксиси башкача. Шаблон башында жайгаштырылышы керек. 

Муну далилдеген бир мисалды алалы.

>>> # текст менен өзгөрмө түзүү

>>> text2 = «»»INF Информатика

213 MAT Математика 156″»»  

>>> # regex компиляция жана үлгүлөрдү изде

>>> regex_num = re.compile('d+')  

>>> s = regex_num.search(text2)  

>>> print('Биринчи индекс: ', s.start())  

>>> print('Акыркы индекс: ', s.end())  

>>> print(text2[s.start():s.end()]) 

Биринчи индекс: 17 

Акыркы индекс: 20

213

Окшош натыйжаны башка жол менен алгыңыз келсе, функцияны колдонсоңуз болот group().

Тексттин бир бөлүгүн Re library менен алмаштыруу

Текстти алмаштыруу үчүн функцияны колдонуңуз re.sub(). Биздин курстардын тизмеси бир аз өзгөрдү дейли. Ар бир санариптик мааниден кийин бизде өтмөк бар экенин көрөбүз. Биздин милдет - бул ырааттуулуктун баарын бир сапка бириктирүү. Бул үчүн s+ туюнтмасын алмаштыруу керек өтүү 

Түпнуска тексти:

# текст менен өзгөрмө түзүү

>>> text = “””100 INF t Информатика

213 MAT t Математика  

156 ENG t Англисче»»»  

>>> басып чыгаруу (текст)  

100 ИНФО Informatics

213 МАТ математика  

156 ENG Кыргызча

Керектүү операцияны аткаруу үчүн биз коддун төмөнкү саптарын колдондук.

# бир же бир нече боштукту 1 менен алмаштырыңыз

>>> regex = re.compile('s+')  

>>> print(regex.sub(' ', текст))  

Натыйжада бизде бир линия пайда болду. 

101 COM Компьютерлер 205 MAT Математика 189 ENG Англис тили

Эми дагы бир маселени карап көрөлү. орундарды коюу милдети биздин алдыбызда эмес. Биз үчүн бардык курстардын аталыштары жаңы саптан башталышы алда канча маанилүү. Бул үчүн, өзгөчөлүккө жаңы сап кошо турган башка туюнтма колдонулат. Бул кандай сөз?

китепкана Re терс дал келүү сыяктуу өзгөчөлүктү колдойт. Ал тике сызыктан мурун илеп белгиси бар экендиги менен айырмаланат. Башкача айтканда, жаңы саптын символун өткөрүп жиберүү керек болсо, анда n ордуна !n жазуу керек.

Биз төмөнкү кодду алабыз.

# жаңы саптан башка бардык боштуктарды алып салуу  

>>> regex = re.compile('((?!n)s+)')  

>>> print(regex.sub(' ', текст))  

100 INF Информатика

213 МАТ Математика  

156 KAZ Кыргызча

Регулярдуу туюнтма топтору деген эмне?

Туруктуу сөз айкаштарынын топторунун жардамы менен биз каалаган объектилерди бир сапта эмес, өзүнчө элементтер түрүндө ала алабыз. 

Биз курстун номерин, кодун жана атын бир сапта эмес, өзүнчө элементтер катары алышыбыз керек дейли. Тапшырманы аяктоо үчүн сиз коддун көп сандагы керексиз саптарын жазышыңыз керек болот. 

Чынында, тапшырма абдан жөнөкөйлөштүрүлүшү мүмкүн. Сиз бардык жазуулар үчүн шаблонду түзө аласыз жана кашаадан алуу керек болгон маалыматтарды гана көрсөтсөңүз болот.

Саптардын саны өтө аз болот. 

# курстун текст үлгүлөрүнүн топторун түзүп, аларды чыгарып алыңыз

>>> course_pattern = '([0-9]+)s*([A-ZY]{3})s*([a-zA-ZoY]{4,})'  

>>> re.findall(курстун_үлгүсү, текст)  

[('100', 'INF', 'Информатика'), ('213', 'MAT', 'Math'), ('156', 'ENG', 'English')]

"Ач көз" дал келүү түшүнүгү

Стандартка ылайык, кадимки туюнтмалар дал келген маалыматтардын максималдуу көлөмүн алуу үчүн программаланган. Жана дагы азыраак керек болсо да.

Тегди алышыбыз керек болгон үлгү HTML кодун карап көрөлү.

>>> text = "Ач көздүү кадимки туюнтмалардын дал келүүсүнүн мисалы"  

>>> re.findall('', текст)  

['Ачкөз регулярдуу туюнтмалардын дал келүүсүнүн мисалы']

Бир гана тегди чыгаруунун ордуна, Python бүт сапты алды. Ошондуктан ач көздүк деп аталат.

Жана бир гана белгини алуу үчүн эмне кылуу керек? Бул учурда, жалкоо дал келүүнү колдонуу керек. Мындай туюнтманы көрсөтүү үчүн үлгүнүн аягына суроо белгиси коюлат.

Сиз төмөнкү кодду жана котормочунун натыйжасын аласыз.

>>> re.findall('', текст)  

[”, ”]

Эгер биринчи жолуккан көрүнүштү гана алуу талап кылынса, анда ыкма колдонулат издөө ().

re.search('', text).group()  

«

Ошондо гана ачылыш теги табылат.

Популярдуу билдирүү калыптары

Бул жерде эң көп колдонулган кадимки туюнтма үлгүлөрүн камтыган таблица.

Python 3 үчүн Re модулунун документтери. Регулярдуу туюнтмалар үчүн Re модулу

жыйынтыктоо

Биз туруктуу сөз айкаштары менен иштөөнүн эң негизги ыкмаларын гана карап чыктык. Кандай болгон күндө да, сиз алардын канчалык маанилүү экенин көрдүңүз. Бул жерде бүтүндөй текстти же анын айрым фрагменттерин талдоо керекпи, социалдык тармактагы постту талдоо керекпи же аны кийинчерээк иштетүү үчүн маалыматтарды чогултуу керекпи айырмасы жок. Бул маселеде туруктуу сөз айкаштары ишенимдүү жардамчы болуп саналат.

Алар төмөнкүдөй тапшырмаларды аткарууга мүмкүндүк берет:

  1. Электрондук почта дареги же телефон номери сыяктуу маалыматтардын форматын көрсөтүү.
  2. Сапты алуу жана аны бир нече кичине саптарга бөлүү.
  3. Текст менен ар кандай операцияларды аткарыңыз, мисалы, издөө, керектүү маалыматты алуу же белгилердин бир бөлүгүн алмаштыруу.

Регулярдуу туюнтмалар майда эмес операцияларды да аткарууга мүмкүндүк берет. Бир караганда бул илимди өздөштүрүү оңой эмес. Бирок иш жүзүндө бардыгы стандартташтырылган, андыктан аны бир жолу аныктап алуу жетиштүү, андан кийин бул куралды Pythonдо гана эмес, башка программалоо тилдеринде да колдонсо болот. Атүгүл Excel да маалыматтарды иштетүүнү автоматташтыруу үчүн кадимки туюнтмаларды колдонот. Андыктан бул куралды колдонбоо күнөө.

Таштап Жооп