Документација за модулот Re за Python 3 во. Re модул за правилни изрази

Редовните изрази се многу популарна компонента на речиси секој програмски јазик. Тие ви помагаат брзо да пристапите до информациите што ви се потребни. Особено, тие се користат кога е неопходно да се обработи текст. Python стандардно доаѓа со посебен модул. re, кој е одговорен за работа со правилни изрази.

Денес ќе разговараме детално за тоа што е воопшто, како да се работи со нив и како модулот re ќе помогне.

Правилни изрази: вовед

Која е употребата на регуларните изрази? Речиси сите. На пример, овие:

  1. Веб апликации кои бараат валидација на текст. Типичен пример се клиентите за онлајн пошта.
  2. Сите други проекти поврзани со текстови, бази на податоци и така натаму.

Пред да започнеме со парсирање на синтаксата, треба подетално да ги разбереме основните принципи на функционирање на библиотеката re и воопшто, што е генерално добро за тоа. Ќе дадеме и примери од реалната практика, каде што ќе го опишеме механизмот на нивната употреба. Можете да креирате таков шаблон, погоден за вас да извршите широк спектар на операции со текст.

Што е шаблон во библиотеката Re?

Со него, можете да пребарувате информации од различни типови, да добивате информации што одговараат на нив, за да ги направите другите функции поприлагодливи. И, се разбира, да се обработат овие податоци.

На пример, земете го следниов образец: s+. Тоа значи каков било простор карактер. Ако додадете знак плус на него, тогаш тоа значи дека шаблонот вклучува повеќе од еден простор. Може дури и да одговара на знаците на јазичето со кои се повикуваат t+.

Пред да ги користите, треба да ја увезете библиотеката Re. После тоа, ние користиме специјална команда за да го составиме шаблонот. Ова се прави во два чекори.

>>> увоз ре

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

Поточно, овој код ја врши операцијата на составување шаблон што може да се користи. на пример, за пребарување празни места (еден или повеќе).

Добивање одделни информации од различни низи со користење на регуларни изрази

Да претпоставиме дека имаме променлива која ги содржи следните информации.

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

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

156 ENG Англиски»»»

Содржи три курсеви за обука. Секој од нив се состои од три дела - број, код и име. Гледаме дека интервалот помеѓу овие зборови е различен. Што да направите за да ја разделите оваа линија на посебни броеви и зборови? Постојат два начина за да се постигне оваа цел:

  1. повикајте функција повторно.сплит.
  2. примени функција се подели за регекс.

Еве пример за користење на синтаксата на секој од методите за нашата променлива.

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

# или

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

Излез: ['100', 'INF', 'Компјутерски науки', '213', 'MAT', 'Математика', '156', 'ENG', 'Англиски']

Во принцип, може да се користат и двата методи. Но, всушност е многу полесно да се користи регуларен израз наместо да се користи функцијата повеќе пати. повторно.сплит.

Наоѓање совпаѓања со три функции

Да речеме дека треба да извлечеме само броеви од низа. Што треба да се направи за ова?

re.findall()

Еве еден случај за употреба за функцијата findall (), кој заедно со регуларни изрази ви овозможува да извлечете појави на еден или повеќе броеви од текстуална променлива.

>>> печатење (текст)  

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

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

156 ИНГ Англиски

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

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

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

Заедно со симболот d, користевме шаблон што означува апсолутно која било нумеричка вредност сместена во променлива или текст. И бидејќи додадовме еден + таму, тоа значи дека мора да биде присутен барем еден број. 

Можете исто така да го користите знакот * за да одредите дека присуството на цифра не е потребно за да се најде совпаѓање.

Но, во нашиот случај, бидејќи користевме +, извлечевме со findall () 1 или повеќе дигитални ознаки на курсеви од текстот. Така, во нашиот случај, регуларните изрази дејствуваат како поставки за функцијата.

re.search() vs re.match()

Како што може да се погоди од името на функциите, првите бараат совпаѓање во текстот. Прашање: Која е разликата помеѓу најдете се? Поентата е што враќа специфичен објект што одговара на шаблонот, а не целата низа на пронајдени резултати во форма на листа, како претходната функција.

За возврат, функцијата re.match го прави истото. Само синтаксата е различна. Шаблонот мора да биде поставен на почетокот. 

Да земеме пример што го покажува ова.

>>> # креирајте променлива со текст

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

213 МАТ Математика 156″»»  

>>> # компајлирај регекс и барај шеми

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

>>> s = regex_num.search(текст2)  

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

>>> print('Последен индекс:', s.end())  

>>> печатење(текст2[s.start():s.end()]) 

Прв индекс: 17 

Последен индекс: 20

213

Ако сакате да добиете сличен резултат на поинаков начин, можете да ја користите функцијата група ().

Замена на дел од текстот со библиотека Re

За да го замените текстот, користете ја функцијата re.sub(). Да претпоставиме дека нашата листа на курсеви е малку променета. Гледаме дека после секоја дигитална вредност имаме таб. Нашата задача е да ја комбинираме целата оваа низа во една линија. За да го направите ова, треба да го замениме изразот s+ да помине 

Оригиналниот текст беше:

# креирајте променлива со текст

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

213 МАТ т Матем  

156 ENG t Англиски»»»  

>>> печатење (текст)  

100 ИНФО Информатика

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

156 ИНГ англиски

За да ја извршиме саканата операција, ги користевме следните линии на код.

# замени едно или повеќе празни места со 1

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

>>> печатење(regex.sub(' ', текст))  

Како резултат на тоа, имаме една линија. 

101 COM Компјутери 205 МАТ Математика 189 ИНГ Англиски

Сега размислете за друг проблем. Не сме соочени со задача да поставуваме простори. За нас е многу поважно сите имиња на курсеви да започнат на нова линија. За да го направите ова, се користи друг израз кој додава нова линија на исклучокот. Каков израз е ова?

библиотека Re поддржува карактеристика како што е негативното совпаѓање. Се разликува од директниот по тоа што содржи извичник пред коса црта. Односно, ако треба да го прескокнеме знакот за нова линија, тогаш треба да напишеме !n наместо n.

Го добиваме следниот код.

# отстранете ги сите празни места освен новата линија  

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

>>> печатење(regex.sub(' ', текст))  

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

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

156 ИНГ Англиски

Кои се групите за правилен израз?

Со помош на групи на правилни изрази, саканите објекти можеме да ги добиеме во форма на посебни елементи, а не во една линија. 

Да претпоставиме дека треба да го добиеме бројот, кодот и името на курсот не во една линија, туку како посебни елементи. За да ја завршите задачата, ќе треба да напишете огромен број непотребни линии на код. 

Всушност, задачата може многу да се поедностави. Можете да го составите образецот за сите записи и само да ги наведете податоците што треба да ги добиете од заградите.

Ќе има многу мал број линии. 

# креирајте групи на курсеви за текстуални шаблони и извлечете ги

>>> курс_шаблон = '([0-9]+)s*([A-ZY]{3})s*([a-zA-ZoY]{4,})'  

>>> re.findall(шема_курс, текст)  

[('100', 'INF', 'Компјутерски науки'), ('213', 'MAT', 'Математика'), ('156', 'ENG', 'англиски')]

Концептот на „алчен“ совпаѓање

Стандардно, регуларните изрази се програмирани за да се извлече максималниот износ на соодветни податоци. Па дури и ако ви треба многу помалку.

Ајде да погледнеме примерок на HTML код каде што треба да ја добиеме ознаката.

>>> текст = „Пример за совпаѓање на алчен правилен израз“  

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

['Пример за совпаѓање на алчно правилни изрази']

Наместо да извлече само една ознака, Пајтон ја доби целата низа. Затоа се нарекува алчен.

И што да направите за да ја добиете само ознаката? Во овој случај, треба да користите мрзливо појавување. За да наведете таков израз, на крајот од шаблонот се додава прашалник.

Ќе го добиете следниот код и излезот од толкувачот.

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

[”,”]

Доколку се бара да се добие само првата наидена појава, тогаш се користи методот пребарување ().

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

"

Тогаш ќе се најде само ознаката за отворање.

Популарни шаблони за изразување

Еве табела која ги содржи најчесто користените обрасци на регуларни изрази.

Документација за модулот Re за Python 3 во. Re модул за правилни изрази

Заклучок

Ги разгледавме само најосновните методи за работа со регуларни изрази. Во секој случај, видовте колку се важни. И тука не прави разлика дали е потребно да се анализира целиот текст или неговите поединечни фрагменти, дали е неопходно да се анализира објава на социјална мрежа или да се собираат податоци за подоцна да се обработи. Редовните изрази се сигурен помошник во ова прашање.

Тие ви дозволуваат да извршувате задачи како што се:

  1. Одредување на форматот на податоците, како што е адресата на е-пошта или телефонскиот број.
  2. Добивање на низа и делење на неколку помали жици.
  3. Извршете различни операции со текст, како што се пребарување, извлекување на потребните информации или замена на дел од знаците.

Редовните изрази исто така ви дозволуваат да вршите нетривијални операции. На прв поглед, совладувањето на оваа наука не е лесно. Но, во пракса, сè е стандардизирано, па доволно е да го сфатите еднаш, по што оваа алатка може да се користи не само во Python, туку и во кој било друг програмски јазик. Дури и Excel користи редовни изрази за автоматизирање на обработката на податоците. Значи, грев е да не се користи оваа алатка.

Оставете Одговор