Python RegEx: re.match(), re.search(), re.findall() с примером

⚡ Умное резюме

Python В этом руководстве по регулярным выражениям рассматриваются функции re.match, re.search, re.findall и re.split на практических примерах. LessВ этом разделе объясняются метасимволы, классы символов, группы, флаги, подстановка и распространенные шаблоны для анализа и проверки текста.

  • 🔤 Модуль re: Импортируйте re, чтобы получить функции match, search, findall, split, sub и compile для задач, связанных с регулярными выражениями.
  • 📐 Метаперсонажи: Шаблоны объединяют точки, звездочки, плюсы, якоря и классы символов для выражения гибких правил построения строк.
  • 🎯 совпадение против поиска: Функция match устанавливает якорь в начале строки, а функция search сканирует всю строку в поисках первого совпадения.
  • 📋 найти все и разделить: Функция findall возвращает все неперекрывающиеся объекты.ping match; split разрывает строку по границам регулярного выражения.
  • 🔁 Замена субтитров: Функция re.sub заменяет найденные совпадения новым текстом или вызовом функции обратного вызова для сложных преобразований текста.
  • 🤖 Справка по регулярным выражениям в ИИ: Искусственные интеллектуальные помощники генерируют и объясняют Python Использование регулярных выражений для сокращения времени проб и ошибок.

Python Учебное пособие по регулярным выражениям

Что такое регулярное выражение в Python?

A Регулярное выражение (RE) В языках программирования это специальная текстовая строка, используемая для описания шаблона поиска. Она чрезвычайно полезна, например, для...tracизвлечение информации из текста, такого как код, файлы, журналы, электронные таблицы или даже документы.

При использовании Python регулярное выражение Первое, что следует осознать, это то, что все, по сути, является символом, и мы пишем шаблоны, соответствующие определенной последовательности символов, также называемой строкой. Ascii или латинские буквы — это те, которые есть на вашей клавиатуре, а Unicode используется для соответствия иностранному тексту. Он включает цифры, знаки препинания, а также все специальные символы, такие как $#@!% и т. д.

Например, Python Регулярное выражение может указать программе искать определенный текст в строке, а затем соответствующим образом распечатать результат. Выражение может включать в себя

  • Сопоставление текста
  • Повторение
  • разветвление
  • Узор-композиция и т.д.

Регулярное выражение или RegEx в Python обозначается как RE (RE, регулярные выражения или шаблон регулярных выражений) импортируются через re модуль. Python поддерживает регулярные выражения через библиотеки. RegEx в Python поддерживает различные вещи, такие как Модификаторы, идентификаторы и пробельные символы.

Идентификаторы Модификаторы Пробелы Требуется побег
\d= любое число (цифра) \d представляет цифру. Пример: \d{1,5} он объявит цифру между 1,5, например 424,444,545 и т. д. \ n = новая строка . + * ? [] $ ^ () {} | \
\D= что угодно, кроме числа (не цифры) + = соответствует 1 или более \s= пробел
\s = пробел
(табуляция, пробел, новая строка и т. д.)
? = соответствует 0 или 1 \t = вкладка
\S= что угодно, кроме пробела * = 0 или более \e = побег
\w = буквы (соответствует буквенно-цифровым символам, включая «_») $ соответствует концу строки \ r = возврат каретки
\W = все, кроме букв (соответствует небуквенно-цифровым символам, за исключением «_») ^ соответствует началу строки \f= подача формы
. = что угодно, кроме букв (точек) | соответствует либо или x/y ------
\b = любой символ, кроме новой строки [] = диапазон или «дисперсия» ------
\. {x} = это количество предыдущего кода ------

Синтаксис регулярного выражения (RE)

import re
  • модуль «re» в комплекте Python в основном используется для поиска и обработки строк
  • Также часто используется для веб-страницы «Скраping" (бывшийtrac(большой объем данных с веб-сайтов)

Мы начнем урок по выражениям с этого простого упражнения, используя выражения (w+) и (^).

Пример выражения w+ и ^

  • «^»: Это выражение соответствует началу строки
  • «ш+«: Это выражение соответствует буквенно-цифровому символу в строке

Здесь мы увидим Python RegEx Пример того, как мы можем использовать выражения w+ и ^ в нашем коде. Мы рассмотрим функцию re.findall() в Python, далее в этом руководстве, но на некоторое время мы просто сосредоточимся на выражениях \w+ и \^.

Например, для нашей строки «guru99, образование — это весело», если мы выполним код с помощью w+ и ^, на выходе будет «guru99».

Пример выражения w+ и ^

import re
xx = "guru99,education ">is fun"
r1 = re.findall(r"^\w+",xx)
print(r1)

Помните, что если вы удалите знак + из w+, вывод изменится и выдаст только первый символ первой буквы, то есть [g]

Пример выражения \s в функции re.split

  • «s»: это выражение используется для создания пробела в строке.

Чтобы понять, как этот RegEx в Python работает, начнем с простого Python RegEx Пример функции разделения. В примере мы разделили каждое слово с помощью функции «re.split» и в то же время использовали выражение \s, которое позволяет анализировать каждое слово в строке отдельно.

Выражение \s в функции re.split

Когда вы выполните этот код, он выдаст вам выходные данные ['мы', 'есть', 'разделение', 'the', 'слова'].

Теперь давайте посмотрим, что произойдет, если вы удалите «\» из s. В выходных данных нет алфавита «s», это связано с тем, что мы удалили «\» из строки, и он оценивает «s» как обычный символ и, таким образом, разделяет слова везде, где он находит «s» в строке.

Выражение \s в функции re.split

Аналогичным образом существует ряд других 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» предоставляет несколько методов для фактического выполнения запросов к входной строке. Мы увидим методы повторного Python:

  • re.match ()
  • исследовать()
  • re.findall ()

Внимание: На основе регулярных выражений, Python предлагает две различные примитивные операции. Метод match проверяет совпадение только в начале строки, тогда как search проверяет совпадение в любом месте строки.

re.match ()

re.match () функция повтора в Python выполнит поиск по шаблону регулярного выражения и вернет первое вхождение. Python Метод RegEx Match проверяет совпадение только в начале строки. Итак, если совпадение найдено в первой строке, оно возвращает объект совпадения. Но если совпадение найдено в какой-то другой строке, Python Функция RegEx Match возвращает ноль.

Например, рассмотрим следующий код Python функция re.match(). Выражения «w+» и «\W» будут соответствовать словам, начинающимся с буквы «g», и после этого все, что не начинается с «g», не идентифицируется. Чтобы проверить соответствие каждого элемента в списке или строке, мы запускаем цикл for в этом Python re.match() Пример.

re.match ()

re.search(): поиск шаблона в тексте

исследовать() функция будет искать шаблон регулярного выражения и возвращать первое вхождение. В отличие от Python re.match(), он проверит все строки входной строки. Python Функция re.search() возвращает объект соответствия, когда шаблон найден, и «ноль», если шаблон не найден.

Как использовать поиск()?

Чтобы использовать функцию search(), вам необходимо импортировать Python сначала переустановите модуль, а затем выполните код. Python Функция re.search() берет «шаблон» и «текст» для сканирования из нашей основной строки.

используйте поиск()

Например, здесь мы ищем две литеральные строки «Тестирование программного обеспечения» «guru99» в текстовой строке «Программное обеспечение». Тестирование это весело». Для «тестирования программного обеспечения» мы нашли совпадение, поэтому оно возвращает результат Python re.search() Пример: «найдено совпадение», тогда как слово «guru99» не удалось найти в строке, поэтому он возвращает результат «Нет совпадения».

re.findall ()

найти все() Модуль `findall()` используется для поиска «всех» вхождений, соответствующих заданному шаблону. В отличие от него, модуль `search()` вернет только первое вхождение, соответствующее указанному шаблону. Модуль `findall()` переберет все строки файла и вернет все неперекрывающиеся строки.ping совпадения шаблонов за один шаг.

Как использовать re.findall() в Python?

Здесь у нас есть список адресов электронной почты, и мы хотим, чтобы все адреса электронной почты были извлечены из списка, мы используем метод 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 Методы и функции регулярных выражений принимают необязательный аргумент, называемый флагами. Эти флаги могут изменить значение данного Python Шаблон регулярного выражения. Чтобы понять это, мы увидим один или два примера этих флагов.

Различные флаги, используемые в Python включает в себя

Синтаксис флагов регулярных выражений Что делает этот флаг
[re.M] Сделайте начало/конец, учитывайте каждую строку
[о.Я] Он игнорирует регистр
[относительно С] Делать [ . ]
[re.U] Make {\w,\W,\b,\B} соответствует правилам Юникода
[относительно Л] Сделать {\w,\W,\b,\B} соответствующим локали
[ре.X] Разрешить комментарии в Regex

Пример re.M или многострочных флагов

В многострочном шаблоне символ [^] соответствует первому символу строки и началу каждой строки (следующему сразу после каждого символа новой строки). В то время как выражение small «w» используется для обозначения пробела с символами. При запуске кода первая переменная «k1» выводит только символ «g» для слова guru99, в то время как при добавлении флага многострочного текста она извлекает первые символы всех элементов в строке.

Пример re.M или многострочных флагов

Вот код

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…». карьерныйгуру99….селен»
  • Запустите код без использования многострочных флагов, он выдает только «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.match ()
  • re.findall ()
  • пере.разделить()
re.findall() используется для поиска всех вхождений шаблона в строке.

2. Что представляет собой класс символов \d в регулярных выражениях?

  • Любая цифра (0-9)
  • Любой нецифровой символ
  • Любой пробельный символ
  • Любая буква или цифра
\d представляет любую цифру (0-9).

3. Какую функцию вы бы использовали для разделения строки на основе пробелов?

  • re.split(r'\s', строка)
  • re.findall(r'\w+', строка)
  • повторное сопоставление(r'\s+', строка)
  • re.split(r'\w+', строка)
re.split(r'\s', string) разбивает строку на основе пробелов, используя выражение \s.

4. В чем основное различие между re.match() и re.search()?

  • re.match() ищет шаблон в начале строки, тогда как re.search() ищет шаблон в любом месте строки.
  • re.match() возвращает все совпадения, а re.search() возвращает первое совпадение.
  • re.search() быстрее, чем re.match().
  • Обе функции ведут себя одинаково.
re.match() ищет шаблон в начале строки, тогда как re.search() ищет шаблон в любом месте строки.

Часто задаваемые вопросы (FAQ)

Метод re.match возвращает объект match только в том случае, если шаблон совпадает с началом строки. Метод re.search сканирует всю строку и возвращает первое совпадение в любом месте.

Да. Инструменты искусственного интеллекта, такие как ChatGPT, Copilot и специализированные помощники по регулярным выражениям, генерируют шаблоны из простого языка, объясняют захваченные данные и переводят регулярные выражения между языками, указывая при этом на распространенные ошибки.

Инструменты искусственного интеллекта выделяют каждый метасимвол, пошагово моделируют совпадения и предлагают исправления. Они выявляют проблемы с чрезмерно жадными кванторами, пропущенные экранирующие символы и рекомендуют опережающее чтение там, где это необходимо.

Используйте re.split(pattern, string). Он возвращает список подстрок между совпадениями. Шаблон может захватывать разделители группами и включать захваченные разделители в результат.

Вызовите re.sub(pattern, replacement, string). Замена может представлять собой строковый литерал с обратными ссылками, например \\1, или функцию, которая возвращает текст, вычисленный на основе каждого объекта совпадения.

Флаги изменяют поведение шаблона. re.IGNORECASE сопоставляет прописные и строчные буквы взаимозаменяемо. re.MULTILINE Позволяет символам ^ и $ соответствовать границам строк, а не только границам строк.

Да. Катастрофическая боль в спине.tracИспользование вложенных кванторов может привести к зависанию интерпретатора. Избегайте шаблонов типа (a+)+, отдавайте предпочтение атомарным группам, если они доступны, и ограничивайте размер входных данных перед вычислением регулярных выражений.

Метод `re.compile` возвращает скомпилированный объект шаблона. Повторное использование одного и того же шаблона во многих строках происходит быстрее, поскольку компиляция выполняется только один раз. Это также делает использование регулярных выражений более понятным в коде.

Подведем итог этой публикации следующим образом: