Python RegEx: re.match(), re.search(), re.findall() із прикладом
Що таке регулярний вираз Python?
A Регулярний вираз (RE) у мові програмування — це спеціальний текстовий рядок, який використовується для опису шаблону пошуку. Це надзвичайно корисно для отримання інформації з тексту, наприклад коду, файлів, журналів, електронних таблиць або навіть документів.
Під час використання Python регулярний вираз, перше, що потрібно зрозуміти, це те, що все, по суті, є символом, і ми пишемо шаблони, щоб відповідати певній послідовності символів, яка також називається рядком. ASCII або латинські літери – це ті, які є на ваших клавіатурах, і Unicode використовується для відповідності іноземному тексту. Він містить цифри та знаки пунктуації та всі спеціальні символи, такі як $#@!% тощо.
Наприклад, a Python регулярний вираз може наказати програмі шукати певний текст у рядку, а потім відповідно роздрукувати результат. Вираз може включати
- Відповідність тексту
- Повторення
- Розгалуження
- Візерунок-композиція тощо.
Регулярний вираз або RegEx в Python позначається як RE (RE, регулярні вирази або шаблон регулярних виразів) імпортуються через повторний модуль. Python підтримує регулярні вирази через бібліотеки. RegEx в Python підтримує різні речі, наприклад Модифікатори, ідентифікатори та пробіли.
Ідентифікатори | Модифікатори | Пробільні символи | Потрібна втеча |
---|---|---|---|
\d= будь-яке число (цифра) | \d представляє цифру. Наприклад: \d{1,5} він оголосить цифру між 1,5, наприклад 424,444,545 XNUMX XNUMX тощо. | \n = новий рядок | . + * ? [] $ ^ () {} | \ |
\D= будь-що, крім числа (не цифри) | + = відповідає 1 або більше | \s= пробіл | |
\s = пробіл (табуляція, пробіл, новий рядок тощо) |
? = відповідає 0 або 1 | \t =вкладка | |
\S= будь-що, крім пробілу | * = 0 або більше | \e = втеча | |
\w = літери (відповідає алфавітно-цифровому символу, включаючи «_») | $ збігається з кінцем рядка | \r = повернення каретки | |
\W = будь-що, крім літер (відповідає не буквено-цифровому символу, за винятком «_») | ^ відповідати початку рядка | \f= подача форми | |
. = все, крім літер (крапок) | | відповідає або x/y | ------ | |
\b = будь-який символ, крім нового рядка | [] = діапазон або «відхилення» | ------ | |
\. | {x} = це кількість попереднього коду | ------ |
Синтаксис регулярного виразу (RE).
import re
- «re» модуль входить до складу Python в основному використовується для пошуку та маніпулювання рядками
- Також часто використовується для веб-сторінки "Вискоблювання” (вилучення великої кількості даних із веб-сайтів)
Ми почнемо підручник з виразів з цієї простої вправи, використовуючи вирази (w+) і (^).
Приклад виразів w+ і ^
- «^»: Цей вираз відповідає початку рядка
- “w+“: цей вираз відповідає буквено-цифровому символу в рядку
Тут ми побачимо а Python RegEx. Приклад того, як ми можемо використовувати вирази w+ і ^ у нашому коді. Ми розглядаємо функцію re.findall() у Python, далі в цьому посібнику, але деякий час ми просто зосередимося на виразах \w+ і \^.
Наприклад, для нашого рядка «guru99, освіта — це весело», якщо ми виконаємо код з w+ і ^, він видасть результат «guru99».
import re xx = "guru99,education is fun" r1 = re.findall(r"^\w+",xx) print(r1)
Пам’ятайте, якщо ви видалите знак + з w+, вивід зміниться, і він видасть лише перший символ першої літери, тобто [g]
Приклад виразу \s у функції re.split
- “s”: цей вираз використовується для створення пробілу в рядку
Щоб зрозуміти, як цей регулярний вираз в Python роботи, починаємо з простого Python RegEx Приклад функції розбиття. У прикладі ми розділили кожне слово за допомогою функції “re.split” і в той же час ми використали вираз \s, який дозволяє проаналізувати кожне слово в рядку окремо.
Коли ви виконуєте цей код, він видасть вам результат ['we', 'are', 'splitting', 'the', 'words'].
Тепер подивимося, що станеться, якщо видалити «\» із s. У вихідних даних немає алфавіту 's', це тому, що ми видалили '\' із рядка, і він оцінює “s” як звичайний символ і, таким чином, розділяє слова там, де він знаходить “s” у рядку.
Так само існують ряди інших Python регулярний вираз, який можна використовувати різними способами Python наприклад \d,\D,$,\.,\b тощо.
Ось повний код
import re xx = "guru99,education is fun" r1 = re.findall(r"^\w+", xx) print((re.split(r'\s','we are splitting the words'))) print((re.split(r's','split the words')))
Далі ми розглянемо типи методів, які використовуються з регулярними виразами Python.
Використання методів регулярних виразів
Пакет «re» надає кілька методів фактичного виконання запитів до вхідного рядка. Ми побачимо методи re in Python:
- re.match()
- re.search()
- re.findall()
Примітка:: на основі регулярних виразів, Python пропонує дві різні примітивні операції. Метод match перевіряє відповідність лише на початку рядка, тоді як search перевіряє відповідність будь-де в рядку.
re.match()
re.match() функція ре в Python шукатиме шаблон регулярного виразу та повертатиме перше входження. The Python Метод RegEx Match перевіряє збіг лише на початку рядка. Отже, якщо збіг знайдено в першому рядку, він повертає відповідний об’єкт. Але якщо збіг знайдено в іншому рядку, то Python Функція RegEx Match повертає значення null.
Наприклад, розглянемо наступний код Python функція re.match(). Вирази “w+” і “\W” відповідатимуть словам, що починаються з літери 'g', і після цього все, що не починається з 'g', не ідентифікується. Щоб перевірити відповідність для кожного елемента в списку або рядку, ми запускаємо цикл forloop Python Приклад re.match().
re.search(): пошук шаблону в тексті
re.search() функція шукатиме шаблон регулярного виразу та повертатиме перше входження. На відміну від Python re.match(), він перевірить усі рядки вхідного рядка. The Python функція re.search() повертає відповідний об’єкт, коли шаблон знайдено, і «null», якщо шаблон не знайдено
Як використовувати search()?
Щоб використовувати функцію search(), вам потрібно імпортувати Python спочатку перемодулюйте модуль, а потім виконайте код. The Python Функція re.search() бере «шаблон» і «текст» для сканування з основного рядка
Наприклад, тут ми шукаємо два літеральні рядки «Тестування програмного забезпечення» «guru99», у текстовому рядку «Програмне забезпечення Тестування весело». Для «тестування програмного забезпечення» ми знайшли збіг, тому він повертає результат Python re.search() Приклад як «знайдено збіг», тоді як для слова «guru99» ми не можемо знайти в рядку, тому він повертає результат як «Немає збігу».
re.findall()
findall() модуль використовується для пошуку «всіх» входжень, які відповідають заданому шаблону. Навпаки, модуль search() поверне лише перше входження, яке відповідає вказаному шаблону. findall() перебирає всі рядки файлу та повертає всі неперекриваючі збіги шаблону за один крок.
Як використовувати re.findall() у Python?
Тут у нас є список адрес електронної пошти, і ми хочемо, щоб усі адреси електронної пошти були витягнуті зі списку, ми використовуємо метод re.findall() у Python. Він знайде всі адреси електронної пошти зі списку.
Ось повний код для прикладу re.findall()
import re list = ["guru99 get", "guru99 give", "guru Selenium"] for element in list: z = re.match("(g\w+)\W(g\w+)", element) if z: print((z.groups())) patterns = ['software testing', 'guru99'] text = 'software testing is fun?' for pattern in patterns: print('Looking for "%s" in "%s" ->' % (pattern, text), end=' ') if re.search(pattern, text): print('found a match!') else: print('no match') abc = 'guru99@google.com, careerguru99@hotmail.com, users@yahoomail.com' emails = re.findall(r'[\w\.-]+@[\w\.-]+', abc) for email in emails: print(email)
Python Прапори
Багато Python Методи регулярних виразів і функції регулярних виразів приймають необов’язковий аргумент під назвою Flags. Ці прапорці можуть змінювати значення заданого Python Шаблон регулярного виразу. Щоб зрозуміти це, ми побачимо один або два приклади цих прапорів.
Різні прапори, що використовуються в Python includes
Синтаксис для прапорів регулярного виразу | Що робить цей прапор |
---|---|
[re.M] | Зробіть початок/кінець, враховуйте кожен рядок |
[re.I] | Він ігнорує регістр |
[re.S] | Зробіть [ . ] |
[re.U] | Зробити { \w,\W,\b,\B} слідувати правилам Unicode |
[re.L] | Зробіть так, щоб {\w,\W,\b,\B} відповідали локалі |
[re.X] | Дозволити коментарі в Regex |
Приклади re.M або Multiline Flags
У багаторядковому шаблоні символ [^] відповідає першому символу рядка та початку кожного рядка (відразу після кожного нового рядка). Тоді як вираз маленьке «w» використовується для позначення пробілу символами. Коли ви запускаєте код, перша змінна «k1» друкує лише символ «g» для слова guru99, а коли ви додаєте багаторядковий прапорець, вона виводить перші символи всіх елементів у рядку.
Ось код
import re xx = """guru99 careerguru99 selenium""" k1 = re.findall(r"^\w", xx) k2 = re.findall(r"^\w", xx, re.MULTILINE) print(k1) print(k2)
- Ми оголосили змінну xx для рядка ” guru99…. careerguru99….селен»
- Запустіть код без використання багаторядкових прапорів, він дає вихід лише «g» із рядків
- Запустіть код із прапорцем «багаторядковий», коли ви друкуєте «k2», він дає вихід як «g», «c» і «s»
- Отже, різницю, яку ми можемо побачити після і до додавання кількох рядків у прикладі вище.
Так само ви можете використовувати інші Python такі прапорці, як re.U (Юнікод), re.L (Дотримуватись локалі), re.X (Дозволити коментарі) тощо.
Python 2 Приклад
Наведені вище коди є Python 3 приклади, якщо ви хочете ознайомитися Python 2, будь ласка, розгляньте наступний код.
# Example of w+ and ^ Expression import re xx = "guru99,education is fun" r1 = re.findall(r"^\w+",xx) print r1 # Example of \s expression in re.split function import re xx = "guru99,education is fun" r1 = re.findall(r"^\w+", xx) print (re.split(r'\s','we are splitting the words')) print (re.split(r's','split the words')) # Using re.findall for text import re list = ["guru99 get", "guru99 give", "guru Selenium"] for element in list: z = re.match("(g\w+)\W(g\w+)", element) if z: print(z.groups()) patterns = ['software testing', 'guru99'] text = 'software testing is fun?' for pattern in patterns: print 'Looking for "%s" in "%s" ->' % (pattern, text), if re.search(pattern, text): print 'found a match!' else: print 'no match' abc = 'guru99@google.com, careerguru99@hotmail.com, users@yahoomail.com' emails = re.findall(r'[\w\.-]+@[\w\.-]+', abc) for email in emails: print email # Example of re.M or Multiline Flags import re xx = """guru99 careerguru99 selenium""" k1 = re.findall(r"^\w", xx) k2 = re.findall(r"^\w", xx, re.MULTILINE) print k1 print k2
Перевірте свій Python знань
1. Який метод використовується для пошуку всіх входжень шаблону в рядку?
- re.search()
- re.match()
- re.findall()
- re.split()
2. Що представляє клас символів \d у регулярних виразах?
- Будь-яка цифра (0-9)
- Будь-який нецифровий символ
- Будь-який пробіл
- Будь-яка буква чи цифра
3. Яку функцію ви б використали, щоб розділити рядок на основі пробілів?
- re.split(r'\s', рядок)
- re.findall(r'\w+', рядок)
- re.match(r'\s+', рядок)
- re.split(r'\w+', рядок)
4. У чому головна відмінність між re.match() і re.search()?
- re.match() шукає шаблон на початку рядка, тоді як re.search() шукає шаблон будь-де в рядку.
- re.match() повертає всі збіги, тоді як re.search() повертає перший збіг.
- re.search() швидше, ніж re.match().
- Обидві функції поводяться однаково.
Підсумки
Регулярний вираз у a мова програмування це спеціальний текстовий рядок, який використовується для опису шаблону пошуку. Він містить цифри та знаки пунктуації та всі спеціальні символи, наприклад $#@!%, тощо. Вираз може містити літерали
- Відповідність тексту
- Повторення
- Розгалуження
- Візерунок-композиція тощо.
In Python, регулярний вираз позначається як RE (RE, регулярні вирази або шаблон регулярних виразів) вбудовані через Python повторний модуль.
- «re» модуль входить до складу Python в основному використовується для пошуку та маніпулювання рядками
- Також часто використовується для «збирання» веб-сторінок (вилучення великої кількості даних із веб-сайтів)
- Методи регулярних виразів включають re.match(),re.search()& re.findall()
- Інше Python Методами заміни RegEx є sub() і subn(), які використовуються для заміни відповідних рядків у re
- Python Прапори Багато Python Методи регулярних виразів і функції регулярних виразів приймають необов’язковий аргумент під назвою Flags
- Ці позначки можуть змінювати значення даного шаблону регулярного виразу
- Різний Python у методах регулярних виразів використовуються прапорці re.M, re.I, re.S тощо.