re

match

re.match(pattern, string)

Цей метод шукає за заданим шаблоном на початку рядка. Наприклад, якщо ми викличемо метод match()на рядку «AV Analytics AV» із шаблоном «AV», він завершиться успішно. Але якщо ми шукатимемо Analytics, то результат буде негативний:

Шуканий підряд знайдено. Щоб вивести її вміст, застосуємо метод group()(ми використовуємо "r" перед рядком шаблону, щоб показати, що це "сира" рядок у Python):

Тепер спробуємо знайти «Analytics» у цьому рядку. Оскільки рядок починається на «AV», метод поверне None:

Також є методи start()і end()для того, щоб дізнатися про початкову і кінцеву позицію знайденого рядка.

re.search(pattern, string)

Метод search()шукає по всьому рядку, але повертає лише перший знайдений збіг.

Метод схожий на match(), але шукає не тільки на початку рядка. На відміну від попереднього, search()поверне об'єкт, якщо ми спробуємо знайти "Analytics":

fullmatch

re.fullmatch(pattern, string, flags=0)

Якщо весь рядок відповідає шаблону регулярного виразу, повертає відповідний збіг. Повертає None, якщо рядок не відповідає шаблону; зауважте, що це відрізняється від збігу нульової довжини.

findall

re.findall(pattern, string)

Повертає список усіх знайдених збігів. Метод findall()не має обмежень на пошук на початку або в кінці рядка. Якщо ми шукатимемо «AV» у нашому рядку, він поверне всі входження «AV». Для пошуку рекомендується використовувати саме findall(), тому що він може працювати і як re.search(), і як re.match().

Якщо берємо одне входження (), то функція поверне список:

Якщо берємо декілька входжень ()()(), то функція поверне список кортежів:

в цьому випадку:

split

re.split(pattern, string, [maxsplit = 0])

Цей метод поділяє рядок за заданим шаблоном.

У прикладі ми розділили слово "Analytics" за літерою "y". Метод split()приймає також аргумент maxsplitзі значенням за умовчанням, рівним 0. У разі він розділить рядок стільки разів, скільки можливо, але якщо вказати цей аргумент, то поділ буде зроблено трохи більше зазначеної кількості раз. Давайте подивимося на приклади Python RegEx:

Ми встановили параметр maxsplitрівним 1 і в результаті рядок був розділений на дві частини замість трьох.

sub

re.sub(pattern, repl, string)

Шукає шаблон у рядку та замінює його на вказаний підрядок. Якщо шаблон не знайдено, рядок залишається незмінним.

compile

re.compile(pattern, repl, string)

Ми можемо зібрати регулярне вираження в окремий об'єкт, який можна використовувати для пошуку. Це також позбавляє переписування одного і того ж виразу.

Приклади

Повернути перше слово з рядка

Спочатку спробуємо витягнути кожен символ (використовуючи .)

Для того, щоб у кінцевий результат не потрапив пробіл, використовуємо . \w.

Тепер спробуємо дістати кожне слово (використовуючи *або +)

І знову в результат потрапили прогалини, оскільки *означає «нуль чи більше символів». Для того, щоб їх прибрати, використовуємо +:

Тепер витягнемо перше слово, використовуючи ^:

Якщо ми використовуємо $замість ^, ми отримаємо останнє слово, а чи не перше:

Повернути перші два символи кожного слова

Варіант 1: використовуючи \w, витягнути два послідовні символи, крім пробельних, з кожного слова:

Варіант 2: витягнути два послідовні символи, використовуючи символ межі слова ( \b):

Повернути домени зі списку email-адрес

Спочатку повернемо всі символи після "@":

Як бачимо, частини .com, .in і т. д. не потрапили в результат. Змінимо наш код:

Другий варіант - витягти тільки домен верхнього рівня, використовуючи групування - ( ):

Витягти дату з рядка

Використовуємо \dдля отримання цифр.

Для отримання лише року нам знову допоможуть дужки:

Витягти слова, що починаються на голосну

Спочатку повернемо всі слова:

А тепер — лише ті, які починаються на певні літери (використовуючи []):

Вище ми бачимо обрізані слова «argest» та «ommunity». Для того, щоб прибрати їх, використовуємо \bдля позначення межі слова:

Також ми можемо використовувати ^всередині квадратних дужок для інвертування групи:

В результаті потрапили слова, що «починаються» з пробілу. Приберемо їх, включивши пробіл у діапазон у квадратних дужках:

Перевірити формат телефонного номера

Номер має бути довжиною 10 знаків і починатися з 8 або 9. Є список телефонних номерів, і потрібно перевірити їх, використовуючи регулярки в Python:

Розбити рядок за кількома роздільниками

Можливе рішення:

Також ми можемо використовувати метод re.sub()для заміни всіх розділів пробілами:

Вийняти інформацію з html-файлу

Допустимо, потрібно витягти інформацію з html-файлу, укладену між <td>і </td>, крім першого стовпця з номером. Також вважатимемо, що html-код міститься у рядку.

Приклад вмісту html-файлу:

За допомогою регулярних виразів у Python це можна вирішити так (якщо помістити вміст файлу в змінну test_str):

Last updated