Python RegEx
RegEx або Regular Expression (регулярний вираз) – це послідовність символів, яка формує шаблон пошуку.
RegEx можна використовувати, щоб перевірити, чи містить рядок указаний шаблон пошуку.
Модуль RegEx
Python має вбудований пакет під назвою re
, який можна використовувати для роботи з регулярними виразами.
Імпортуйте модуль re
:
import re
RegEx в Python
Коли ви імпортували модуль re
, ви можете почати використовувати регулярні вирази:
Приклад
Знайдіть рядок, щоб побачити, чи починається він на "The" і закінчується на "Spain":
import re
txt = "The rain in Spain"
x = re.search("^The.*Spain$", txt)
Спробуйте самі »
RegEx Функції
Модуль re
пропонує набір функцій, які дозволяють нам шукати відповідність у рядку:
Функція | Опис |
---|---|
findall | Повертає список з усіма збігами |
search | Повертає Match об’єкт, якщо є відповідність будь-де в рядку |
split | Повертає список, де рядок було розділено при кожному збігу |
sub | Замінює один або багато збігів рядком |
Метасимволи
Метасимволи – це символи зі спеціальним значенням:
Символ | Опис | Приклад | Спробуй це |
---|---|---|---|
[] | Набір символів | "[a-m]" | Спробуй це » |
\ | Сигналізує спеціальну послідовність (також може використовуватися для екранування спеціальних символів) | "\d" | Спробуй це » |
. | Будь-який символ (крім символу нового рядка) | "he..o" | Спробуй це » |
^ | Починати з | "^hello" | Спробуй це » |
$ | Закінчується на | "planet$" | Спробуй це » |
* | Нуль або більше випадків | "he.*o" | Спробуй це » |
+ | Один або кілька випадків | "he.+o" | Спробуй це » |
? | Нуль або один раз | "he.?o" | Спробуй це » |
{} | Точно вказана кількість повторень | "he.{2}o" | Спробуй це » |
| | Або | "falls|stays" | Спробуй це » |
() | Захоплення та групування |
Спеціальні послідовності
Спеціальна послідовність — це \
, за якою йде один із символів у списку нижче, і вона має особливе значення:
Символ | Опис | Приклад | Спробуй це |
---|---|---|---|
\A | Повертає збіг, якщо вказані символи знаходяться на початку рядка | "\AThe" | Спробуй це » |
\b | Повертає збіг, якщо вказані символи знаходяться на початку або в кінці слова ("r" на початку гарантує, що рядок розглядається як "необроблений рядок") |
r"\bain" r"ain\b" |
Спробуй це » Спробуй це » |
\B | Повертає збіг, якщо вказані символи присутні, але НЕ на початку (чи в кінці) слова ("r" на початку гарантує, що рядок розглядається як "необроблений рядок") |
r"\Bain" r"ain\B" |
Спробуй це » Спробуй це » |
\d | Повертає збіг, якщо рядок містить цифри (числа з 0-9) | "\d" | Спробуй це » |
\D | Повертає збіг, якщо рядок НЕ містить цифр | "\D" | Спробуй це » |
\s | Повертає збіг, якщо рядок містить пробіл | "\s" | Спробуй це » |
\S | Повертає збіг, якщо рядок НЕ містить пробілу | "\S" | Спробуй це » |
\w | Повертає збіг, якщо рядок містить будь-які символи слова (символи від a до Z, цифри від 0 до 9 і символ підкреслення _) | "\w" | Спробуй це » |
\W | Повертає збіг, якщо рядок НЕ містить символів слів | "\W" | Спробуй це » |
\Z | Повертає збіг, якщо вказані символи знаходяться в кінці рядка | "Spain\Z" | Спробуй це » |
Набори
Набір – це набір символів у парі квадратних дужок []
зі спеціальним значенням:
Набір | Опис | Спробуй це |
---|---|---|
[arn] | Повертає збіг, де один з указаних символів (a , r , або n ) присутній |
Спробуй це » |
[a-n] | Повертає збіг для будь-якого символу нижнього регістру в алфавітному порядку a та n |
Спробуй це » |
[^arn] | Повертає збіг для будь-якого символу EXCEPT a , r та n |
Спробуй це » |
[0123] | Повертає збіг будь-якої з указаних цифр (0 , 1 , 2 , або 3 ) присутні |
Спробуй це » |
[0-9] | Повертає збіг для будь-якої цифри між 0 та 9 |
Спробуй це » |
[0-5][0-9] | Повертає збіг для будь-яких двозначних чисел від 00 до 59 |
Спробуй це » |
[a-zA-Z] | Повертає збіг для будь-якого символу в алфавітному порядку від a до z , нижній регістр АБО верхній регістр |
Спробуй це » |
[+] | У наборах + , * , . , | , () , $ ,{} не має спеціального значення, тому [+] означає: повернути збіг для будь-якого символа + у рядку |
Спробуй це » |
Функція findall()
Функція findall()
повертає список з усіма збігами.
Приклад
Роздрукуйте список усіх збігів:
import re
txt = "The rain in Spain"
x = re.findall("ai", txt)
print(x)
Спробуйте самі »
Список містить збіги в порядку їх пошуку.
Якщо збігів не знайдено, повертається порожній список:
Приклад
Повертає порожній список, якщо відповідності не знайдено:
import re
txt = "The rain in Spain"
x = re.findall("Portugal", txt)
print(x)
Спробуйте самі »
Функція search()
Функція search()
шукає відповідність у рядку та повертає Match об’єкт, якщо збіг є.
Якщо знайдено більше одного збігу, буде повернено лише перший збіг:
Приклад
Пошук першого пробілу в рядку:
import re
txt = "The rain in Spain"
x = re.search("\s", txt)
print("Перший символ пробілу знаходиться на місці:", x.start())
Спробуйте самі »
Якщо збігів не знайдено, повертається значення None
:
Приклад
Здійсніть пошук, який не дає результатів:
import re
txt = "The rain in Spain"
x = re.search("Portugal", txt)
print(x)
Спробуйте самі »
Функція split()
Функція split()
повертає список, де рядок було розділено при кожному збігу:
Приклад
Розділіть на кожен пробіл:
import re
txt = "The rain in Spain"
x = re.split("\s", txt)
print(x)
Спробуйте самі »
Ви можете контролювати кількість входжень, вказавши параметр maxsplit
:
Приклад
Розділіть рядок лише при першому вході:
import re
txt = "The rain in Spain"
x = re.split("\s", txt, 1)
print(x)
Спробуйте самі »
Функція sub()
Функція sub()
замінює збіги текстом за вашим вибором:
Приклад
Замініть кожен пробіл цифрою 9:
import re
txt = "The rain in Spain"
x = re.sub("\s", "9", txt)
print(x)
Спробуйте самі »
Ви можете контролювати кількість замін, вказавши параметр count
:
Приклад
Замініть перші 2 входження:
import re
txt = "The rain in Spain"
x = re.sub("\s", "9", txt, 2)
print(x)
Спробуйте самі »
Відповідність об’єкту
Об’єкт відповідності – це об’єкт, що містить інформацію про пошук і результат.
Примітка: Якщо відповідності немає, замість об’єкта відповідності буде повернено значення None
.
Приклад
Виконайте пошук, який поверне об’єкт відповідності:
import re
txt = "The rain in Spain"
x = re.search("ai", txt)
print(x) #це надрукує об’єкт
Спробуйте самі »
Об’єкт Match має властивості та методи, які використовуються для отримання інформації про пошук і результат:
.span()
повертає кортеж, що містить початкову та кінцеву позиції збігу..string
повертає рядок, переданий у функцію.group()
повертає частину рядка, де був збіг.
Приклад
Надрукуйте позицію (початкову та кінцеву позиції) першого збігу.
Регулярний вираз шукає будь-які слова, які починаються з верхнього регістру "S":
import re
txt = "The rain in Spain"
x = re.search(r"\bS\w+", txt)
print(x.span())
Спробуйте самі »
Приклад
Надрукувати рядок, переданий у функцію:
import re
txt = "The rain in Spain"
x = re.search(r"\bS\w+", txt)
print(x.string)
Спробуйте самі »
Приклад
Надрукуйте частину рядка, де було збіг.
Регулярний вираз шукає будь-які слова, які починаються з верхнього регістру "S":
import re
txt = "The rain in Spain"
x = re.search(r"\bS\w+", txt)
print(x.group())
Спробуйте самі »
Примітка: Якщо відповідності немає, замість об’єкта відповідності буде повернено значення None
.