Python 3 жүйесіне арналған Re модуліне арналған құжаттама. Тұрақты өрнектерге арналған Re модулі

Тұрақты өрнектер кез келген бағдарламалау тілінің өте танымал құрамдас бөлігі болып табылады. Олар сізге қажетті ақпаратқа жылдам қол жеткізуге көмектеседі. Атап айтқанда, олар мәтінді өңдеу қажет болғанда қолданылады. Python әдепкі бойынша арнайы модульмен бірге келеді. re, ол тұрақты тіркестермен жұмыс істеуге жауапты.

Бүгін біз бұл жалпы не, олармен қалай жұмыс істеу керек және модуль туралы егжей-тегжейлі сөйлесеміз re көмектеседі.

Тұрақты тіркестер: кіріспе

Тұрақты сөз тіркестерінің қолданысы қандай? Барлығы дерлік. Мысалы, мыналар:

  1. Мәтінді тексеруді қажет ететін веб-қосымшалар. Әдеттегі мысал - онлайн пошта клиенттері.
  2. Мәтіндерге, дерекқорларға және т.б. қатысты кез келген басқа жобалар.

Синтаксисті талдауды бастамас бұрын, біз кітапхана жұмысының негізгі принциптерін толығырақ түсінуіміз керек. re және жалпы алғанда, бұл туралы не жақсы. Біз сондай-ақ нақты тәжірибеден мысалдар келтіреміз, онда біз оларды қолдану механизмін сипаттаймыз. Мәтінмен әртүрлі операцияларды орындауға қолайлы осындай үлгіні жасауға болады.

Re кітапханасындағы үлгі дегеніміз не?

Оның көмегімен басқа функцияларды бейімдеу үшін әртүрлі типтегі ақпаратты іздеуге, оларға сәйкес ақпаратты алуға болады. Және, әрине, бұл деректерді өңдеу үшін.

Мысалы, келесі үлгіні алыңыз: s+. Ол кез келген кеңістік таңбасын білдіреді. Егер сіз оған қосу белгісін қоссаңыз, бұл үлгіде бірнеше бос орын бар екенін білдіреді. Ол тіпті шақырылатын қойынды таңбаларына сәйкес келуі мүмкін t+.

Оларды пайдаланбас бұрын кітапхананы импорттау керек Re. Осыдан кейін шаблонды құрастыру үшін арнайы команданы қолданамыз. Бұл екі қадаммен орындалады.

>>> қайта импорттау

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

Атап айтқанда, бұл код қолдануға болатын үлгіні құрастыру операциясын орындайды. мысалы, бос орындарды іздеу үшін (бір немесе бірнеше).

Тұрақты өрнектерді пайдаланып әртүрлі жолдардан бөлек ақпарат алу

Бізде келесі ақпаратты қамтитын айнымалы бар делік.

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

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

156 KAZ Ағылшын»»»

Ол үш оқу курсын қамтиды. Олардың әрқайсысы үш бөліктен тұрады - нөмір, код және атау. Бұл сөздердің аралығы әртүрлі екенін көреміз. Бұл жолды бөлек сандар мен сөздерге бөлу үшін не істеу керек? Бұл мақсатқа жетудің екі әдісі бар:

  1. функцияны шақыру қайта бөлу.
  2. функциясын қолдану Сызат үшін регистр.

Мұнда айнымалыға арналған әдістердің әрқайсысының синтаксисін пайдаланудың мысалы келтірілген.

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

# немесе

>>> regex.split(мәтін)

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

Жалпы, екі әдісті де қолдануға болады. Бірақ функцияны бірнеше рет пайдаланудың орнына тұрақты өрнекті пайдалану әлдеқайда оңай. қайта бөлу.

Үш функциясы бар сәйкестіктерді табу

Жолдан тек сандарды шығару керек делік. Бұл үшін не істеу керек?

re.findall()

Мұнда функцияны пайдалану жағдайы берілген findall(), ол тұрақты өрнектермен бірге мәтіндік айнымалыдан бір немесе бірнеше санның кездесулерін шығаруға мүмкіндік береді.

>>> басып шығару (мәтін)  

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

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

156 KAZ Ағылшын тілі

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

>>> regex_num.findall(мәтін)  

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

d символымен бірге біз айнымалы немесе мәтінде орналасқан кез келген сандық мәнді көрсететін үлгіні қолдандық. Біз оған бір + қосқандықтан, бұл кем дегенде бір сан болуы керек дегенді білдіреді. 

Сәйкестікті табу үшін санның болуы талап етілмейтінін көрсету үшін * белгісін пайдалануға болады.

Бірақ біздің жағдайда, біз + пайдаланғандықтан, біз бірге шығардық findall() Мәтіннен курстардың 1 немесе одан да көп сандық белгіленуі. Осылайша, біздің жағдайда тұрақты өрнектер функцияның параметрлері ретінде әрекет етеді.

re.search() қарсы re.match()

Функциялардың атынан болжауға болатындай, бірінші мәтіндегі сәйкестікті іздейді. Сұрақ: Олардың айырмашылығы неде табу? Мәселе мынада, ол алдыңғы функция сияқты тізім түріндегі табылған нәтижелердің бүкіл тізбегін емес, үлгіге сәйкес келетін нақты нысанды қайтарады.

Өз кезегінде, re.match функциясы да солай етеді. Тек синтаксисі басқаша. Үлгіні ең басында орналастыру керек. 

Мұны дәлелдейтін мысалды алайық.

>>> # мәтінмен айнымалы жасаңыз

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

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

>>> # regex құрастырыңыз және үлгілерді іздеңіз

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

>>> s = regex_num.search(мәтін2)  

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

>>> print('Соңғы индекс: ', s.end())  

>>> басып шығару(text2[s.start():s.end()]) 

Бірінші көрсеткіш: 17 

Соңғы көрсеткіш: 20

213

Ұқсас нәтижені басқа жолмен алғыңыз келсе, функцияны пайдалануға болады топ().

Мәтін бөлігін Re кітапханасымен ауыстыру

Мәтінді ауыстыру үшін функцияны пайдаланыңыз re.sub(). Біздің курстар тізімі аздап өзгерді делік. Әрбір сандық мәннен кейін бізде қойынды бар екенін көреміз. Біздің міндетіміз - осы тізбектің барлығын бір жолға біріктіру. Ол үшін s+ өрнегін ауыстыру керек өту 

Түпнұсқа мәтіні болды:

# мәтінмен айнымалы жасаңыз

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

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

156 KAZ t Ағылшын»»»  

>>> басып шығару (мәтін)  

100 АҚПАРАТ Информатика

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

156 ANG ағылшын

Қажетті операцияны орындау үшін біз кодтың келесі жолдарын қолдандық.

# бір немесе бірнеше бос орынды 1-ге ауыстырыңыз

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

>>> басып шығару(regex.sub(' ', мәтін))  

Нәтижесінде бізде бір сызық бар. 

101 COM Компьютерлер 205 MAT Математика 189 KAZ Ағылшын тілі

Енді басқа мәселені қарастырыңыз. Бізде бос орындарды қою міндеті тұрған жоқ. Біз үшін барлық курс атауларының жаңа жолдан басталуы әлдеқайда маңызды. Ол үшін ерекше жағдайға жаңа жол қосатын басқа өрнек пайдаланылады. Бұл қандай өрнек?

Кітапхана Re теріс сәйкестік сияқты мүмкіндікті қолдайды. Тікелейден айырмашылығы, онда қиғаш сызықтың алдында леп белгісі бар. Яғни, егер жаңа жол таңбасын өткізіп жіберу керек болса, онда n орнына !n жазу керек.

Біз келесі кодты аламыз.

# жаңа жолдан басқа барлық бос орындарды алып тастаңыз  

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

>>> басып шығару(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', 'Ағылшын')]

«ашкөз» сәйкестік түсінігі

Стандартты түрде тұрақты өрнектер сәйкес деректердің максималды көлемін шығару үшін бағдарламаланған. Тіпті сізге әлдеқайда аз қажет болса да.

Тегті алуымыз керек үлгідегі HTML кодын қарастырайық.

>>> text = «Ағаш тұрақты өрнектерді сәйкестендіру мысалы»  

>>> re.findall('', мәтін)  

['Ашық тұрақты өрнектерді сәйкестендіру мысалы']

Бір тегті шығарудың орнына, Python бүкіл жолды алды. Сондықтан оны сараңдық деп атайды.

Ал тек тегті алу үшін не істеу керек? Бұл жағдайда сіз жалқау сәйкестікті пайдалануыңыз керек. Мұндай өрнекті көрсету үшін үлгінің соңына сұрақ белгісі қойылады.

Сіз келесі кодты және аудармашының шығысын аласыз.

>>> re.findall('', мәтін)  

[”, ”]

Егер бірінші кездескен оқиғаны ғана алу қажет болса, онда әдіс қолданылады іздеу ().

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

«

Содан кейін тек ашу тегі ғана болады.

Танымал өрнек үлгілері

Мұнда ең жиі қолданылатын тұрақты өрнек үлгілері бар кесте берілген.

Python 3 жүйесіне арналған Re модуліне арналған құжаттама. Тұрақты өрнектерге арналған Re модулі

қорытынды

Біз тұрақты тіркестермен жұмыс істеудің ең негізгі әдістерін ғана қарастырдық. Қалай болғанда да, сіз олардың қаншалықты маңызды екенін көрдіңіз. Мұнда бүкіл мәтінді немесе оның жеке фрагменттерін талдау қажет пе, әлеуметтік желідегі жазбаны талдау немесе оны кейінірек өңдеу үшін деректерді жинау қажет пе, айырмашылығы жоқ. Тұрақты тіркестер бұл мәселеде сенімді көмекші болып табылады.

Олар келесідей тапсырмаларды орындауға мүмкіндік береді:

  1. Электрондық пошта мекенжайы немесе телефон нөмірі сияқты деректер пішімін көрсету.
  2. Жолды алу және оны бірнеше кіші жолдарға бөлу.
  3. Мәтінмен әртүрлі әрекеттерді орындаңыз, мысалы, іздеу, қажетті ақпаратты шығару немесе таңбалардың бір бөлігін ауыстыру.

Тұрақты өрнектер тривиальды емес операцияларды орындауға да мүмкіндік береді. Бір қарағанда, бұл ғылымды меңгеру оңай емес. Бірақ іс жүзінде бәрі стандартталған, сондықтан оны бір рет анықтау жеткілікті, содан кейін бұл құралды тек Python тілінде ғана емес, кез келген басқа бағдарламалау тілінде де қолдануға болады. Тіпті Excel бағдарламасы деректерді өңдеуді автоматтандыру үшін тұрақты өрнектерді пайдаланады. Сондықтан бұл құралды қолданбау күнә.

пікір қалдыру