Функція findall()
У Python функція findall() належить до модуля re, який використовується для роботи з регулярними виразами. Ця функція шукає всі неперервні входження шаблону в рядку і повертає їх у вигляді списку. Приклад з відео:
#"RegEx", або регулярний вираз, це
#послідовність символів, яка утворює
#шаблон пошуку.
#RegEx можна використовувати, щоб перевірити,
#чи містить рядок вказаний шаблон пошуку.
#Python має вбудований пакет під назвою re,
#з яким можна працювати
#Імпортуйте модуль re.
#Функція findall() повертає список із усіма збігами.
import re
str1 = "It was raining outside."
mathcList = re.findall("rain", str1)
print(str1)
print(mathcList)
Приклад з findall(), якщо не було збігів:
#Якщо збігів не знайдено,
#повертається порожній список
import re
str1 = "It was raining outside."
matchList = re.findall("snowing",str1)
print(str1)
print(matchList)
Символ | Опис | Приклад |
[] | Набір символів | “[a-m]” |
\ | Сигналізує спеціальну послідовність (також може використовуватися для екранування спеціальних символів) | “\d” |
. | Будь-який символ (крім символу нового рядка) | “ra..g” |
^ | Починається з | “^It” |
$ | Закінчується на | “side.$” |
* | Нуль або більше випадків | “ra.*g” |
+ | Один або кілька випадків | “ra.+g” |
? | Нуль або один раз | “ra.?g” |
{} | Точно вказана кількість повторень | “ra.{4}g” |
| | Або або | “raining|snowing” |
Приклад із метсимволами з відео:
import re
str1 = "15th December. It was raining outside."
#Знайти всі символи нижнього регістру в
#алфавітному порядку між «a» і «y»:
searchResult = re.findall("[a-y]", str1)
print("All lower case characters")
print(searchResult)
#Знайти всі цифрові символи:
searchResult2 = re.findall("\d", str1)
print(searchResult2)
#Пошук послідовності, яка починається з "ra", а потім чотири (будь-які)
#символи та "g":
searchResult3 = re.findall("ra....g", str1)
print(searchResult3)
Ще приклад із застосуванням метсимволів з відео:
import re
str1 = "It was raining outside."
#Перевірте, чи рядок починається з "It":
searchResult = re.findall("^It", str1)
print(searchResult)
#Перевірте, чи закінчується рядок на 'side.':
searchResult2 = re.findall("side.$", str1)
print(searchResult2)
#Пошук послідовності, яка починається з "ra", після чого йде 0
#або більше символів і "g":
searchResult3 = re.findall("ra.*g", str1)
print(searchResult3)
Ще один приклад з метасимволами з відео:
import re
str1 = "It was raining outside."
#Пошук послідовності, яка починається
#з "ra", за якою йде 1 або більше
# (будь-яких) символів та "g"
searchResult = re.findall("ra.+g", str1)
print(searchResult)
#Пошук послідовності, яка починається
#з "ra", після чого йде 0 або 1
#символ і "g":
searchResult2 = re.findall("ra.?g", str1)
print(searchResult2)
#Пошук послідовності, яка починається
#з "ra", з точним дотриманням
#4 символи та "g"
searchResult3 = re.findall("ra.{4}g",str1)
print(searchResult3)
#Перевірте, чи рядок містить текст "raining" чи "snowing"
searchResult4 = re.findall("raining|snowing",str1)
print(searchResult4)
Також findall() можна застосовувати зі спеціальними послідовностями.
Символ | Опис | Приклад |
\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” |
Приклад зі спеціальними символами з відео:
import re
str1 = "25th December. It was raining outside."
#Перевірте, чи починається рядок з "It"
searchResult = re.findall("\AIt", str1)
print(searchResult)
#Перевірте, чи є слово «rain» на початку слова
searchResult2 = re.findall(r"\brain", str1)
print(searchResult2)
#Перевірте, чи є "ing" у кінці слова
searchResult3 = re.findall(r"ing\b", str1)
print(searchResult3)
#Перевірте, чи присутній "ini", але НЕ на початку слова
searchResult4 = re.findall(r"\Bini", str1)
print(searchResult4)
#Перевірте, чи містить рядок якісь цифри (від 0 до 9)
searchResult5 = re.findall("\d", str1)
print(searchResult5)
Ще один приклад з відео зі спецсимволами:
import re
str1 = "25th December. It was raining outside."
#Повертати збіг для кожного символу без цифр
print("Return a match at every no-digit character")
searchResult = re.findall("\D", str1)
print(searchResult)
#Повертати збіг для кожного пробілу
print("Return a match at every white-space character")
searchResult2 = re.findall("\s", str1)
print(searchResult2)
#Повертати збіг для кожного НЕ пробілу
print("Return a match at every NON white-space character")
searchResult3 = re.findall("\S", str1)
print(searchResult3)
#Повертати збіг для кожного символу слова
#(символи від a до Z, цифри від 0 до 9 і символ підкреслення _)"
print("Return a match at every word character (characters from a to Z, digits from 0-9, and the underscore _ character)")
searchResult4 = re.findall("\w", str1)
print(searchResult4)
#Повертати збіг для кожного НЕ символу слова
#(символи НЕ між a і Z. Наприклад \"!\", \"?\" пробіл тощо)
print("Return a match at every NON word character (characters NOT between a and Z. Like \"!\", \"?\" white-space etc.)")
searchResult5 = re.findall("\W", str1)
print(searchResult5)
#Перевірте, чи закінчується рядок на \"outside.\
print("Check if the string ends with \"outside.\"")
searchResult6 = re.findall("outside.\Z", str1)
print(searchResult6)
З findall() також часто використовуються sets або набори символів.
Set | Опис |
[arn] | Повертає збіг, де присутній один із указаних символів (a, r або n). |
[a-n] | Повертає збіг для будь-якого символу нижнього регістру в алфавітному порядку від a до n |
[^arn] | Повертає збіг для будь-якого символу, КРІМ a, r і n |
[0123] | Повертає збіг, якщо присутня будь-яка з указаних цифр (0, 1, 2 або 3). |
[0-9] | Повертає збіг для будь-якої цифри від 0 до 9 |
[0-5][0-9] | Повертає збіг для будь-яких двозначних чисел від 00 до 59 |
[a-zA-Z] | Повертає збіг для будь-якого символу в алфавітному порядку від a до z, нижнього АБО верхнього регістру |
[+] | У наборах +, *, ., |, (), $,{} не мають спеціального значення, тому [+] означає: повертає збіг для будь-якого символу + у рядку |
Приклад з наборами символів з відео:
import re
str1 = "25th December. It was raining outside."
#Перевірте, чи містить рядок символи j, i або w
searchResult = re.findall("[jiw]", str1)
print(searchResult)
#Перевірте, чи містить рядок символи між j і w
searchResult2 = re.findall("[j-w]", str1)
print(searchResult2)
#Перевірте, чи містить рядок інші символи, крім j, i чи w
searchResult3 = re.findall("[^jiw]", str1)
print(searchResult3)
#Перевірте, чи містить рядок 1, 2, 3, 4 або 5 цифр
searchResult4 = re.findall("[12345]", str1)
print(searchResult4)
Ще один приклад з відео з наборами символів:
import re
str1 = "25th December. It was raining outside.+"
#Перевірте, чи містить рядок цифри від 0 до 9
searchResult = re.findall("[0-9]", str1)
print(searchResult)
#Перевірте, чи містить рядок двозначні числа від 00 до 99
searchResult2 = re.findall("[0-9][0-9]", str1)
print(searchResult2)
#Перевірте, чи містить рядок символи
#від a до w нижнього регістру,
#і від A до Y у верхньому регістрі
searchResult3 = re.findall("[a-wA-Y]", str1)
print(searchResult3)
#Перевірте, чи містить рядок символи +
searchResult4 = re.findall("[+]", str1)
print(searchResult4)
Функція search()
Функція search() у Python також належить до модуля re, який використовується для роботи з регулярними виразами. Ця функція шукає перше входження шаблону в рядку і повертає об’єкт-результат, якщо знайдено, або None, якщо входження не виявлено. Приклад з відео:
#Функція search() шукає збіг у рядку та повертає
#Match об'єкт, якщо є збіг.
#Якщо є більше одного збігу, лише перший збіг
#повернеться.
import re
str1 = "It was raining outside."
match1 = re.search("\s", str1)
print(match1)
print("Position of space: ", match1.start())
Ще один приклад із застосуванням функції search() з відео:
#Якщо збігів не знайдено,
#повертається значення None
import re
str1 = "It was raining outside."
match1 = re.search("snowing", str1)
print(match1)
Функція split()
Функція split() у Python використовується для розділення рядка на список підрядків на основі роздільника. Приклад з відео:
#Функція split() повертає список,
#де було розділено рядок
#по кожному збігу.
import re
str1 = "It was raining outside."
splitedList = re.split("\s", str1)
print(str1)
print(splitedList)
print(str1)
Ще один приклад із застосуванням функції split():
#Ви можете контролювати кількість
#повторень, вказавши
#параметр maxsplit
import re
str1 = "It was raining outside."
splitedList = re.split("\s", str1, 1)
print(str1)
print(splitedList)
Функція sub()
Функція sub() у Python належить до модуля re і використовується для заміни частин рядка, які відповідають заданому регулярному виразу, на інший рядок. Приклад з відео:
#Функція sub() замінює збіги
#текстом за вашим вибором
import re
str1 = "It was raining outside."
substitutedStr1 = re.sub("\s", "-", str1)
print(str1)
print(substitutedStr1)
Ще один приклад із sub() з відео:
#Ви можете контролювати кількість замін,
#вказавши параметр count
import re
str1 = "It was raining outside."
substitutedStr1 = re.sub("\s", "-", str1, 1)
print(str1)
print(substitutedStr1)
Match object
Match object (об’єкт відповідності) у Python є результатом виконання функцій модуля re, таких, наприклад, як search() та findall(). Цей об’єкт надає інформацію про знайдене входження регулярного виразу в рядок. Він містить різні методи та атрибути, які дозволяють отримати деталі про знайдене входження. Приклад з відео:
#Об’єкт відповідності – це об’єкт,
#що містить інформацію про пошук
#і результат.
#Якщо збігу немає, замість нього
#буде повернено значення None
import re
str1 = "It was raining outside."
searchResult = re.search("rain", str1)
print(searchResult)
Приклад з Match object та span():
#.span() повертає кортеж,
#що містить початкову та кінцеву позиції
#збігу.
#Регулярний вираз шукає будь-які слова,
#які починаються з малої літери "r"
import re
str1 = "It was raining outside."
searchResult = re.search(r"\br\w+", str1)
print(searchResult)
print(searchResult.span())
Приклад з Match object та group():
#.group() повертає частину
#рядка, де був збіг
#Регулярний вираз шукає будь-які
#слова, які починаються з малої літери "r"
import re
str1 = "It was raining outside."
searchResult = re.search(r"\br\w+", str1)
print(searchResult)
print(searchResult.group())
Приклад з Match object та string:
#.string повертає рядок, переданий у функцію
#Регулярний вираз шукає будь-які слова,
#які починаються з малої літери "r"
import re
str1 = "It was raining outside."
searchResult = re.search(r"\br\w+", str1)
print(searchResult)
print(searchResult.string)
В цьому відео поговоримо про:
00:00:08 findall() Function
00:05:20 Metacharacters – метасимволи
00:20:07 Special Sequences – Спеціальні послідовності
00:43:41 Sets – набори у регулярних виразах
00:57:07 search() Function
01:01:44 split()
01:06:40 sub()
01:09:46 Match object