Dokumentace k modulu Re pro Python 3 v . Modul Re pro regulární výrazy

Regulární výrazy jsou velmi oblíbenou součástí téměř každého programovacího jazyka. Pomáhají vám rychle získat přístup k informacím, které potřebujete. Zejména se používají, když je potřeba zpracovat text. Python je standardně dodáván se speciálním modulem. re, který je zodpovědný za práci s regulárními výrazy.

Dnes si podrobně povíme, co to je obecně, jak s nimi pracovat a jak modul re pomůže.

Regulární výrazy: úvod

Jaké jsou použití regulárních výrazů? Téměř všechny. Například tyto:

  1. Webové aplikace, které vyžadují ověření textu. Typickým příkladem jsou online poštovní klienti.
  2. Jakékoli další projekty související s texty, databázemi a tak dále.

Než se pustíme do syntaxe syntaxe, měli bychom podrobněji porozumět základním principům fungování knihovny re a obecně, co je na něm obecně dobré. Uvedeme i příklady z reálné praxe, kde popíšeme mechanismus jejich použití. Můžete si vytvořit takovou šablonu, vhodnou pro provádění široké škály operací s textem.

Co je šablona v knihovně Re?

S ním můžete vyhledávat informace různých typů, získávat jim odpovídající informace, aby se další funkce přizpůsobily. A samozřejmě tato data zpracovávat.

Vezměte například následující šablonu: s+. Znamená libovolný znak mezery. Pokud k němu přidáte znaménko plus, znamená to, že vzor obsahuje více než jednu mezeru. Může dokonce odpovídat znakům tabulátoru, které jsou volány s t+.

Před jejich použitím je třeba knihovnu importovat Re. Poté pomocí speciálního příkazu zkompilujeme šablonu. To se provádí ve dvou krocích.

>>> import re

>>> regulární výraz = re.compile('s+')

Konkrétně tento kód provádí operaci kompilace šablony, kterou lze použít. například pro hledání mezer (jednu nebo více).

Získávání samostatných informací z různých řetězců pomocí regulárních výrazů

Předpokládejme, že máme proměnnou obsahující následující informace.

>>> text = “””100 INF Informatika

213 MAT Matematika  

156 CZE Česky»»»

Obsahuje tři vzdělávací kurzy. Každá z nich se skládá ze tří částí – čísla, kódu a názvu. Vidíme, že interval mezi těmito slovy je jiný. Co dělat, aby se tento řádek rozdělil na samostatná čísla a slova? Existují dva způsoby, jak tohoto cíle dosáhnout:

  1. zavolat funkci znovu rozdělit.
  2. aplikovat funkci rozdělit for regex.

Zde je příklad použití syntaxe každé z metod pro naši proměnnou.

>>> re.split('s+', text)  

# nebo

>>> regex.split(text)

Výstup: ['100', 'INF', 'Computer Science', '213', 'MAT', 'Math', '156', 'ENG', 'English']

Obecně lze použít obě metody. Ale ve skutečnosti je mnohem snazší použít regulární výraz místo vícenásobného použití funkce. znovu rozdělit.

Hledání shod se třemi funkcemi

Řekněme, že potřebujeme z řetězce extrahovat pouze čísla. Co je pro to potřeba udělat?

re.findall()

Zde je příklad použití funkce findall(), který spolu s regulárními výrazy umožňuje extrahovat výskyty jednoho nebo více čísel z textové proměnné.

>>> tisk (text)  

100 INF Informatika

213 MAT Matematika  

156 CZE Angličtina

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

>>> regulární_číslo.findall(text)  

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

Spolu se symbolem d jsme použili šablonu, která označuje naprosto libovolnou číselnou hodnotu umístěnou v proměnné nebo textu. A protože jsme tam přidali jedno +, znamená to, že musí být přítomno alespoň jedno číslo. 

Můžete také použít znak * k určení, že pro nalezení shody není vyžadována přítomnost číslice.

Ale v našem případě, protože jsme použili +, extrahovali jsme pomocí findall() 1 nebo více digitálních označení kurzů z textu. V našem případě tedy regulární výrazy fungují jako nastavení funkce.

re.search() vs odveta()

Jak můžete uhodnout z názvu funkcí, první hledá shodu v textu. Otázka: Jaký je rozdíl mezi najít vše? Jde o to, že vrací konkrétní objekt, který odpovídá vzoru, a ne celou sekvenci nalezených výsledků ve formě seznamu, jako předchozí funkce.

Totéž zase dělá funkce re.match. Jen syntaxe je jiná. Šablona musí být umístěna na začátku. 

Vezměme si příklad, který to demonstruje.

>>> # vytvořit proměnnou s textem

>>> text2 = «»»INF Informatika

213 MAT Matematika 156″»»  

>>> # zkompilujte regulární výraz a vyhledejte vzory

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

>>> s = regex_num.search(text2)  

>>> print('První index: ', s.start())  

>>> print('Poslední index:', s.end())  

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

První index: 17 

Poslední index: 20

213

Pokud chcete získat podobný výsledek jiným způsobem, můžete použít funkci skupina().

Nahrazení části textu knihovnou Re

Chcete-li nahradit text, použijte funkci re.sub(). Předpokládejme, že se náš seznam kurzů trochu změnil. Vidíme, že po každé digitální hodnotě máme záložku. Naším úkolem je spojit všechny tyto sekvence do jednoho řádku. K tomu potřebujeme nahradit výraz s+ projít 

Původní text byl:

# vytvořte proměnnou s textem

>>> text = “””100 INF t Informatika

213 MAT t Matematika  

156 CZE t anglicky»»»  

>>> tisk (text)  

100 XNUMX XNUMX INFO Informatika

213 XNUMX XNUMX XNUMX MAT Matematika  

156 ANG angličtina

K provedení požadované operace jsme použili následující řádky kódu.

# nahraďte jednu nebo více mezer 1

>>> regulární výraz = re.compile('s+')  

>>> print(regex.sub(' ', text))  

V důsledku toho máme jeden řádek. 

101 COM Počítače 205 MAT Matematika 189 CZE Angličtina

Nyní zvažte další problém. Nestojíme před úkolem dávat mezery. Pro nás je mnohem důležitější, aby všechny názvy kurzů začínaly na novém řádku. K tomu se používá jiný výraz, který k výjimce přidá nový řádek. Co je to za výraz?

Knihovna Re podporuje funkci, jako je negativní shoda. Od přímého se liší tím, že před lomítkem obsahuje vykřičník. To znamená, že pokud potřebujeme přeskočit znak nového řádku, pak musíme místo n napsat !n.

Získáme následující kód.

# odstranit všechny mezery kromě nového řádku  

>>> regulární výraz = re.compile('((?!n)s+)')  

>>> print(regex.sub(' ', text))  

100 INF Informatika

213 MAT Matematika  

156 CZE Angličtina

Co jsou to skupiny regulárních výrazů?

Pomocí skupin regulárních výrazů můžeme získat požadované objekty ve formě samostatných prvků, nikoli v jednom řádku. 

Předpokládejme, že potřebujeme získat číslo kurzu, kód a název ne na jednom řádku, ale jako samostatné prvky. K dokončení úkolu budete muset napsat obrovské množství zbytečných řádků kódu. 

Ve skutečnosti lze úkol značně zjednodušit. Můžete sestavit šablonu pro všechny položky a pouze zadat údaje, které potřebujete získat ze závorek.

Bude zde velmi malý počet řádků. 

# vytvořit skupiny šablon textu kurzu a extrahovat je

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

>>> re.findall(vzor_kurzu, text)  

[('100', 'INF', 'Computer Science'), ('213', 'MAT', 'Math'), ('156', 'ENG', 'English')]

Koncept „chamtivého“ párování

Standardně jsou regulární výrazy naprogramovány tak, aby extrahovaly maximální množství odpovídajících dat. A to i v případě, že potřebujete mnohem méně.

Podívejme se na ukázkový HTML kód, kde potřebujeme značku získat.

>>> text = “Příklad shody chamtivých regulárních výrazů”  

>>> re.findall('', text)  

['Příklad shody chamtivých regulárních výrazů']

Namísto extrahování pouze jednoho tagu Python získal celý řetězec. Proto se tomu říká chamtivý.

A co udělat, abyste získali pouze značku? V tomto případě musíte použít líné párování. Pro určení takového výrazu se na konec vzoru přidá otazník.

Získáte následující kód a výstup interpretu.

>>> re.findall('', text)  

[, ”]

Pokud je požadováno získat pouze první zjištěný výskyt, použije se metoda Vyhledávání ().

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

"

Poté bude nalezena pouze úvodní značka.

Šablony populárních výrazů

Zde je tabulka obsahující nejčastěji používané vzory regulárních výrazů.

Dokumentace k modulu Re pro Python 3 v . Modul Re pro regulární výrazy

Proč investovat do čističky vzduchu?

Uvažovali jsme pouze o nejzákladnějších metodách práce s regulárními výrazy. V každém případě jste viděli, jak jsou důležité. A zde nezáleží na tom, zda je nutné analyzovat celý text nebo jeho jednotlivé fragmenty, zda je nutné analyzovat příspěvek na sociální síti nebo sbírat data pro pozdější zpracování. Spolehlivým pomocníkem jsou v této věci regulární výrazy.

Umožňují vám provádět úkoly, jako jsou:

  1. Zadání formátu dat, jako je e-mailová adresa nebo telefonní číslo.
  2. Získání provázku a jeho rozdělení na několik menších provázků.
  3. Provádějte různé operace s textem, jako je vyhledávání, získávání potřebných informací nebo nahrazování části znaků.

Regulární výrazy také umožňují provádět netriviální operace. Zvládnout tuto vědu není na první pohled snadné. V praxi je ale vše standardizované, takže na to stačí přijít jednou, načež lze tento nástroj používat nejen v Pythonu, ale i v jakémkoli jiném programovacím jazyce. I Excel používá regulární výrazy k automatizaci zpracování dat. Je tedy hřích tento nástroj nevyužít.

Napsat komentář