Что такое регулярное выражение в Python?
Regular Expression (RE) на языке программирования это специальная текстовая строка , используемая для описания шаблона поиска. Это чрезвычайно полезно для извлечения информации из текста, такого как код, файлы, журнал, электронные таблицы или даже документы.
При использовании регулярного выражения первое, что нужно признать, это то, что все по сути является символом, и мы пишем шаблоны для соответствия определенной последовательности символов, также называемой строкой. Буквы Ascii или латинские буквы — это те, которые находятся на вашей клавиатуре, а Unicode используется для соответствия иностранному тексту. Он включает цифры и знаки препинания и все специальные символы, такие как $ # @!% И т. Д.
В этом уроке мы узнаем
- Синтаксис регулярных выражений
- Пример выражения w + и ^
- Пример выражения \ s в функции re.split
- Использование методов регулярных выражений
- Использование re.match ()
- Поиск шаблона в тексте (re.search ())
- Использование re.findall для текста
- Флаги питона
- Пример re.M или многострочных флагов
Например, регулярное выражение может указать программе выполнить поиск определенного текста из строки, а затем распечатать результат соответствующим образом. Выражение может включать
- Соответствие текста
- Репетиция
- разветвление
- Узор-композиция и др.
В Python регулярное выражение обозначается как RE (RE, регулярные выражения или шаблоны регулярных выражений) импортируются через модуль re . Python поддерживает регулярные выражения через библиотеки. В Python регулярное выражение поддерживает различные вещи, такие как модификаторы, идентификаторы и символы пробела .
Идентификаторы | Модификаторы | Пробельные символы | Требуется побег |
\ d = любое число (цифра) | \ d представляет собой цифру. Например: \ d {1,5} она будет объявлять цифру между 1,5, как 424 444 545 и т. д. | \ n = новая строка | , + *? [] $ ^ () {} | \ |
\ D = все, кроме числа (не цифра) | + = соответствует 1 или более | \ s = пробел | |
\ s = пробел (табуляция, пробел, перевод строки и т. д.) | ? = соответствует 0 или 1 | \ t = вкладка | |
\ S = все, кроме пробела | * = 0 или больше | \ e = побег | |
\ w = буквы (соответствуют буквенно-цифровому символу, включая «_») | $ match конец строки | \ r = возврат каретки | |
\ W = все, кроме букв (соответствует буквенно-цифровому символу, исключая «_») | ^ соответствует началу строки | \ f = подача формы | |
, = все, кроме букв (точек) | | соответствует либо х / у | —————— | |
\ b = любой символ, кроме новой строки | [] = диапазон или «дисперсия» | —————- | |
\. | {x} = это количество предыдущего кода | —————— |
Синтаксис регулярного выражения (RE)
import re
- Модуль re, включенный в Python, в основном используется для поиска и манипулирования строками
- Также часто используется для веб-страницы «Соскоб» (извлечение большого количества данных с веб-сайтов)
Мы начнем обучение с выражений с этого простого упражнения, используя выражения (w +) и (^).
Пример выражения w + и ^
- «^»: Это выражение соответствует началу строки
- «w + «: это выражение соответствует буквенно-цифровому символу в строке
Здесь мы увидим пример того, как мы можем использовать выражения w + и ^ в нашем коде. Мы рассмотрим функцию re.findall позже в этом уроке, но какое-то время мы просто сосредоточимся на \ w + и \ ^ expression.
Например, для нашей строки «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, мы начнем с простого примера функции split. В этом примере мы разбили каждое слово с помощью функции «re.split» и одновременно использовали выражение \ s, которое позволяет анализировать каждое слово в строке отдельно.
Когда вы выполните этот код, он выдаст вам выходные данные [‘we’, ‘are’, ‘split’, ‘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')))
Далее мы рассмотрим типы методов, которые используются с регулярными выражениями.
Использование методов регулярных выражений
Пакет «re» предоставляет несколько методов для выполнения запросов к входной строке. Метод, который мы увидим
- re.match ()
- исследование()
- re.findall ()
Примечание : на основе регулярных выражений Python предлагает две различные примитивные операции. Метод match проверяет совпадение только в начале строки, в то время как поиск проверяет совпадение в любом месте строки.
re.match ()
Функция re.match () будет искать шаблон регулярного выражения и возвращать первое вхождение. Этот метод проверяет совпадение только в начале строки. Таким образом, если совпадение найдено в первой строке, оно возвращает объект совпадения. Но если совпадение найдено в какой-то другой строке, оно возвращает ноль.
Например, рассмотрим следующий код. Выражения «w +» и «\ W» будут соответствовать словам, начинающимся с буквы «g», и после этого все, что не начинается с «g», не идентифицируется. Чтобы проверить соответствие для каждого элемента в списке или строке, мы запускаем forloop.
re.search (): поиск шаблона в тексте
Функция re.search () будет искать шаблон регулярного выражения и возвращать первое вхождение. В отличие от re.match, он будет проверять все строки входной строки. Возвращает совпадающий объект, когда шаблон найден, и «null», если шаблон не найден.
Чтобы использовать функцию search (), сначала нужно импортировать re, а затем выполнить код. Функция search () берет «шаблон» и «текст» для сканирования из нашей основной строки
Например, здесь мы ищем две буквенные строки «Тестирование программного обеспечения», «guru99», в текстовой строке « Тестирование программного обеспечения — это весело». Для «тестирования программного обеспечения» мы нашли совпадение, следовательно, он возвращает вывод как «найдено совпадение», в то время как для слова «guru99» мы не смогли найти в строке, следовательно, он возвращает вывод как «Нет совпадения».
re.findall ()
Модуль findall () используется для поиска «всех» вхождений, соответствующих заданному шаблону. Напротив, модуль search () будет возвращать только первое вхождение, которое соответствует указанному шаблону. findall () будет перебирать все строки файла и возвращать все неперекрывающиеся совпадения шаблона за один шаг.
Например, здесь у нас есть список адресов электронной почты, и мы хотим, чтобы все адреса электронной почты были извлечены из списка, мы используем метод 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 = '[email protected], [email protected], [email protected]' emails = re.findall(r'[\w\.-]+@[\w\.-]+', abc) for email in emails: print(email)
Флаги питона
Многие методы Python Regex и функции Regex принимают необязательный аргумент, называемый Flags. Эти флаги могут изменить значение данного шаблона Regex. Чтобы понять это, мы увидим один или два примера этих флагов.
Различные флаги, используемые в Python, включают
Синтаксис для флагов Regex | Что делает этот флаг |
[Re.M] | Сделать начало / конец рассмотреть каждую строку |
[Re.I] | Игнорирует регистр |
[Re.S] | Делать [ . ] |
[Re.U] | Make {\ w, \ W, \ b, \ B} следует правилам Юникода |
[Re.L] | Заставьте {\ w, \ W, \ b, \ B} следовать локали |
[Re.X] | Разрешить комментировать в Regex |
Пример re.M или многострочных флагов
В мультилинии символ шаблона [^] соответствует первому символу строки и началу каждой строки (после каждой новой строки). В то время как выражение маленькое "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)
- Мы объявили переменную хх для строки "guru99…. Careerguru99… .selenium"
- Запустите код без использования флагов multiline, он выводит только 'g' из строк
- Запустите код с флагом «multiline», когда вы печатаете «k2», он выводит как «g», «c» и «s»
- Таким образом, разницу мы видим после и до добавления многострочных в приведенном выше примере.
Кроме того, вы также можете использовать другие флаги Python, такие как re.U (Unicode), re.L (Follow locale), re.X (Allow Comment) и т. Д.
Пример 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 = '[email protected], [email protected], [email protected]' 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 регулярное выражение обозначается как RE (RE, регулярные выражения или шаблоны регулярных выражений) внедряются через re module.
- Модуль re, включенный в Python, в основном используется для поиска и манипулирования строками
- Также часто используется для веб-страницы «Соскоб» (извлечение большого количества данных с веб-сайтов)
- Методы регулярных выражений включают re.match (), re.search () & re.findall ()
- Флаги Python Многие Python Regex Methods и функции Regex принимают необязательный аргумент под названием Flags
- Эти флаги могут изменить значение данного шаблона Regex
- Различные методы Python, используемые в методах Regex: re.M, re.I, re.S и т. Д.