Ҳуҷҷатҳо барои модули Re барои Python 3 дар. Модули Re барои ифодаҳои муқаррарӣ

Ифодаҳои муқаррарӣ ҷузъи хеле маъмули қариб ҳама забони барномасозӣ мебошанд. Онҳо ба шумо кӯмак мекунанд, ки маълумоти заруриро зуд дастрас кунед. Аз ҷумла, онҳо ҳангоми коркарди матн истифода мешаванд. Python бо нобаёнӣ бо модули махсус меояд. re, ки барои кор бо ибораҳои муқаррарӣ масъул аст.

Имрӯз мо ба таври муфассал дар бораи он чӣ дар маҷмӯъ, чӣ тавр ба кор бо онҳо ва чӣ тавр модул гап re кӯмак хоҳад кард.

Ибораҳои муқаррарӣ: муқаддима

Ибораҳои муқаррарӣ кадомҳоянд? Қариб ҳама. Масалан, инҳо:

  1. Барномаҳои веб, ки тасдиқи матнро талаб мекунанд. Мисоли маъмулӣ муштариёни почтаи онлайн аст.
  2. Ҳама гуна лоиҳаҳои дигари марбут ба матнҳо, пойгоҳи додаҳо ва ғайра.

Пеш аз он ки мо таҳлили синтаксисро оғоз кунем, мо бояд принсипҳои асосии фаъолияти китобхонаро муфассалтар фаҳмем. re ва умуман, дар бораи он чӣ хуб аст. Мо инчунин аз амалияи воқеӣ мисолҳо меорем, ки дар он механизми истифодаи онҳоро тавсиф мекунем. Шумо метавонед чунин қолаберо созед, ки барои иҷрои амалиёти гуногун бо матн мувофиқ аст.

Шаблон дар китобхонаи Re чист?

Бо он шумо метавонед иттилооти намудҳои гуногунро ҷустуҷӯ кунед, иттилооти ба онҳо мувофиқро ба даст оред, то дигар функсияҳо мутобиқ карда шаванд. Ва, албатта, барои коркарди ин маълумот.

Масалан, қолаби зеринро гиред: s+. Ин маънои ҳар гуна аломати фазоиро дорад. Агар шумо ба он аломати плюс илова кунед, ин маънои онро дорад, ки намуна зиёда аз як фосиларо дар бар мегирад. Он ҳатто метавонад бо аломатҳои ҷадвал мувофиқат кунад, ки бо онҳо даъват карда мешаванд t+.

Пеш аз истифодаи онҳо, шумо бояд китобхонаро ворид кунед Re. Баъд аз ин, мо барои тартиб додани шаблон фармони махсусро истифода мебарем. Ин дар ду марҳила анҷом дода мешавад.

>>> аз нав ворид кунед

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

Махсусан, ин код амалиёти тартиб додани қолаберо иҷро мекунад, ки метавонад истифода шавад. масалан, барои ҷустуҷӯи ҷойҳо (як ё якчанд).

Гирифтани иттилооти алоҳида аз сатрҳои гуногун бо истифода аз ибораҳои муқаррарӣ

Фарз мекунем, ки мо як тағирёбанда дорем, ки дорои маълумоти зерин аст.

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

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

156 ENG англисӣ»»»

Он дорои се курси омӯзишӣ мебошад. Ҳар яки онҳо аз се қисм - рақам, рамз ва ном иборат аст. Мо мебинем, ки фосилаи байни ин калимаҳо гуногун аст. Чӣ бояд кард, то ин сатрро ба рақамҳо ва калимаҳои алоҳида тақсим кунанд? Барои ноил шудан ба ин ҳадаф ду роҳ вуҷуд дорад:

  1. функсияро даъват кунед аз нав тақсим кардан.
  2. функсияро татбиқ кунед Зада шикастан барои регекс.

Ин аст мисоли истифодаи синтаксиси ҳар як усул барои тағирёбандаи мо.

>>> re.split('s+', матн)  

# ё

>>> regex.split(матн)

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

Умуман, ҳарду усулро истифода бурдан мумкин аст. Аммо дар асл истифодаи ифодаи муқаррарӣ ба ҷои истифодаи якчанд маротиба функсия осонтар аст. аз нав тақсим кардан.

Ҷустуҷӯи мувофиқ бо се функсия

Фарз мекунем, ки мо бояд танҳо рақамҳоро аз сатр ҷудо кунем. Барои ин чй бояд кард?

re.findall()

Дар ин ҷо як ҳолати истифода барои функсия аст findall (), ки дар якҷоягӣ бо ибораҳои муқаррарӣ ба шумо имкон медиҳад, ки пайдоиши як ё якчанд ададро аз тағирёбандаи матнӣ ҷудо кунед.

>>> чоп (матн)  

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

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

156 ENG англисӣ

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

>>> regex_num.findall(матн)  

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

Якҷоя бо рамзи d, мо қолаберо истифода бурдем, ки комилан ҳама гуна арзиши ададии дар тағирёбанда ё матн ҷойгиршударо нишон медиҳад. Ва азбаски мо як + дар он ҷо илова кардем, ин маънои онро дорад, ки ҳадди аққал як рақам бояд мавҷуд бошад. 

Шумо инчунин метавонед аломати * -ро истифода баред, то муайян кунед, ки мавҷудияти рақам барои пайдо кардани мувофиқат талаб карда намешавад.

Аммо дар ҳолати мо, азбаски мо +-ро истифода кардем, бо истихроҷ кардем findall () 1 ё зиёда нишондодҳои рақамии курсҳо аз матн. Ҳамин тариқ, дар ҳолати мо, ифодаҳои муқаррарӣ ҳамчун танзимоти функсия амал мекунанд.

re.search() vs re.match()

Тавре ки шумо метавонед аз номи функсияҳо тахмин кунед, аввал дар матн мувофиқатро ҷустуҷӯ мекунад. Савол: Фарқи байни ёфт? Гап дар он аст, ки он объекти мушаххасеро, ки ба намуна мувофиқат мекунад, бармегардонад, на тамоми пайдарпаии натиҷаҳои ёфтшуда дар шакли рӯйхат, ба монанди функсияи қаблӣ.

Дар навбати худ, функсияи re.match ҳамин корро мекунад. Танҳо синтаксис гуногун аст. Шаблон бояд дар ибтидо ҷойгир карда шавад. 

Биёед мисолеро гирем, ки инро исбот мекунад.

>>> # бо матн тағирёбанда эҷод кунед

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

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

>>> # regex тартиб диҳед ва намунаҳоро ҷустуҷӯ кунед

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

>>> s = regex_num.search(text2)  

>>> чоп ('Индекси аввал: ', s.start())  

>>> чоп ('Индекси охирин: ', s.end())  

>>> чоп (text2[s.start():s.end()]) 

Индекси якум: 17 

Индекси охирин: 20

213

Агар шумо хоҳед, ки натиҷаи шабеҳро бо роҳи дигар ба даст оред, шумо метавонед ин функсияро истифода баред гурӯҳ ().

Иваз кардани қисми матн бо китобхонаи Re

Барои иваз кардани матн, функсияро истифода баред re.sub (). Фарз мекунем, ки рӯйхати курсҳои мо каме тағйир ёфт. Мо мебинем, ки пас аз ҳар як арзиши рақамӣ мо ҷадвал дорем. Вазифаи мо аз он иборат аст, ки хамаи ин пай дар пай дар як сатр якчоя кунем. Барои ин мо бояд ифодаи s+-ро иваз кунем Гузаштан 

Матни аслӣ ин буд:

# бо матн тағирёбанда эҷод кунед

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

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

156 ENG t English»»»  

>>> чоп (матн)  

100 МАЪЛУМОТ Информатсия

213 МАТ риёзиёт  

156 Англис забони англисӣ

Барои иҷрои амалиёти дилхоҳ, мо сатрҳои зерини кодро истифода мебарем.

# як ё якчанд фосиларо бо 1 иваз кунед

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

>>> чоп (regex.sub(' ', матн))  

Дар натича мо як хат дорем. 

101 Компютерҳои COM 205 MAT Математика 189 ENG Забони англисӣ

Акнун як масъалаи дигарро дида бароед. Дар назди мо вазифаи гузоштани ҷойҳо нест. Барои мо хеле муҳимтар аст, ки ҳамаи номҳои курсҳо аз хати нав оғоз мешаванд. Барои ин ифодаи дигаре истифода мешавад, ки ба истисно сатри нав илова мекунад. Ин чӣ гуна ифода аст?

китобхона Re як хусусиятро ба монанди мувофиқати манфӣ дастгирӣ мекунад. Он аз хати мустақим бо он фарқ мекунад, ки дар он пеш аз хати хати нидо ишора мекунад. Яъне, агар ба мо лозим меояд, ки аломати сатри навро гузаред, пас мо бояд ба ҷои n !n нависем.

Мо рамзи зеринро мегирем.

# ҳама ҷойҳоро ба истиснои сатри нав хориҷ кунед  

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

>>> чоп (regex.sub(' ', матн))  

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

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

156 ENG англисӣ

Гурӯҳҳои ифодаи муқаррарӣ кадомҳоянд?

Бо ёрии гуруххои иборахои мукаррарй мо метавонем объектхои дилхохро дар шакли элементхои алохида ба даст орем, на дар як сатр. 

Фарз мекунем, ки мо бояд рақами курс, код ва номро на дар як сатр, балки ҳамчун унсурҳои алоҳида гирем. Барои анҷом додани вазифа, шумо бояд шумораи зиёди сатрҳои нолозимро нависед. 

Дар асл, вазифаро хеле содда кардан мумкин аст. Шумо метавонед қолабро барои ҳама сабтҳо тартиб диҳед ва танҳо маълумотеро, ки шумо бояд аз қавсҳо гиред, муайян кунед.

Шумораи хеле ками сатрҳо хоҳад буд. 

# гурӯҳҳои қолибҳои матнии курс эҷод кунед ва онҳоро истихроҷ кунед

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

>>> re.findall (намунаи_курс, матн)  

[('100', 'INF', 'Информатика'), ('213', 'MAT', 'Математика'), ('156', 'ENG', 'Англисӣ')]

Консепсияи мувофиқати "тамаъкор"

Аз рӯи стандарт, ифодаҳои муқаррарӣ барои истихроҷи ҳадди аксар маълумоти мувофиқ барномарезӣ шудаанд. Ва ҳатто агар ба шумо хеле камтар лозим бошад.

Биёед намунаи рамзи HTML-ро дида бароем, ки дар он тегро гирифтан лозим аст.

>>> text = "Намунаи мувофиқати ифодаи муқаррарии хасис"  

>>> re.findall('', матн)  

['Намунаи мувофиқати ифодаи муқаррарии хасисона']

Ба ҷои истихроҷи як тег, Python тамоми сатрро гирифт. Аз ин рӯ, онро тамаъкор меноманд.

Ва барои гирифтани танҳо тег чӣ бояд кард? Дар ин ҳолат, шумо бояд мувофиқати танбалиро истифода баред. Барои муайян кардани чунин ифода ба охири намуна аломати савол гузошта мешавад.

Шумо рамзи зерин ва баромади тарҷумонро хоҳед гирифт.

>>> re.findall('', матн)  

[”, ”]

Агар барои гирифтани танҳо ҳодисаи аввалини дучоршуда талаб карда шавад, пас усул истифода мешавад ҷустуҷӯ ().

re.search('', матн).гурӯҳ()  

"

Он гоҳ танҳо теги кушода пайдо мешавад.

Шаблонҳои маъмулии ифода

Дар ин ҷо ҷадвале мавҷуд аст, ки намунаҳои маъмултарини ифодаи муқаррариро дар бар мегирад.

Ҳуҷҷатҳо барои модули Re барои Python 3 дар. Модули Re барои ифодаҳои муқаррарӣ

хулоса

Мо танҳо усулҳои асосии кор бо ибораҳои муқаррариро баррасӣ кардем. Дар ҳар сурат, шумо дидед, ки онҳо то чӣ андоза муҳиманд. Ва дар ин ҷо фарқияте надорад, ки оё тамоми матн ё порчаҳои алоҳидаи онро таҳлил кардан лозим аст, хоҳ зарурати таҳлили паём дар шабакаи иҷтимоӣ ё ҷамъоварии маълумот барои коркарди он дертар аст. Ибораҳои муқаррарӣ дар ин масъала ёрдамчии боэътимод мебошанд.

Онҳо ба шумо имкон медиҳанд, ки вазифаҳои зеринро иҷро кунед:

  1. Муайян кардани формати маълумот, ба монанди суроғаи почтаи электронӣ ё рақами телефон.
  2. Гирифтани сатр ва тақсим кардани он ба якчанд сатрҳои хурдтар.
  3. Бо матн амалҳои гуногунро иҷро кунед, ба монанди ҷустуҷӯ, истихроҷи маълумоти зарурӣ ё иваз кардани қисми аломатҳо.

Ифодаҳои муқаррарӣ инчунин ба шумо имкон медиҳанд, ки амалҳои ночизро иҷро кунед. Дар назари аввал азхуд кардани ин илм осон нест. Аммо дар амал ҳама чиз стандартизатсия шудааст, бинобар ин як маротиба фаҳмидани он кифоя аст, ки пас аз он ин асбобро на танҳо дар Python, балки дар ҳама гуна забони барномасозӣ низ истифода бурдан мумкин аст. Ҳатто Excel барои автоматикунонии коркарди маълумот ифодаҳои муқаррариро истифода мебарад. Аз ин рӯ, истифода накардани ин асбоб гуноҳ аст.

Дин ва мазҳаб