Что такое регулярные выражения (регулярное выражение): -
Регулярное выражение (regex) — это последовательность символов, используемая для сопоставления с образцом и манипуляций со строками. Они обеспечивают краткий способ описания сложных текстовых шаблонов, обеспечивая эффективный поиск. Регулярные выражения кратки, но могут быть сложными из-за особых символов и шаблонов. Regex также позволяет пользователям выполнять расширенное сопоставление шаблонов, группировку, обратные ссылки и просмотр вперед/назад. В этом посте мы рассмотрим регулярное выражение с использованием Python3.
Регулярное выражение Python: -
Python имеет встроенный модуль под названием «re», который необходимо импортировать для работы с Regex.
Мета-персонажи: -
В регулярном выражении есть метасимволы, которые используются для создания шаблонов регулярных выражений. Вот список различных мета-персонажей:
Специальные последовательности: -
Это краткие представления часто встречающихся шаблонов. Они упрощают некоторые сложные узоры. Вот список:
ПРИМЕЧАНИЕ: — Я не включил все специальные последовательности, есть и другие последовательности, такие как (\B, \W и т. д.)
Пример:
import re text = "x8989072" x = r'\A[a-zA-Z][0-9]+' result = bool(re.match(x, text)) print(result) # Output: True
Это вернет «Истина», если строка начинается с любого алфавита (строчного ИЛИ верхнего регистра) и за ней следует любая цифра от «0 до 9» один ИЛИ большее количество раз.
Функция search() в Regex: -
Это используется для поиска соответствия строки в зависимости от требования. Он всегда возвращает первое совпадение в строке (отображаются не все совпадения).
import re text = "Stop Scrolling Instagram, Start Learning Python" x = re.search(r"S", text) print(x) # Output: <re.Match object; span=(0, 1), match='S'>
Как видите, рассматривалось только первое слово «Стоп». Это связано с тем, что функция поиска возвращает только первое совпадение из строки.
Функция findall() в Regex: -
Эта функция возвращает массив (список), содержащий все совпадения на основе нашего регулярного выражения.
import re text = "AI's AI coded AI for AI to decipher AI's complex AI algorithms." x = re.findall(r"AI", text) print(x) # Output: ['AI', 'AI', 'AI', 'AI', 'AI', 'AI']
Здесь мы можем наблюдать, что функция findall() создала массив, куда добавила все экземпляры слова «AI», найденные в нашей строке.
Функция sub() в Regex: -
Эта функция заменит совпадения символом/текстом по вашему выбору.
import re text = "Anxious alligators awkwardly assembled, eagerly awaiting their afternoon appetizer." x = re.sub("a", "@", text) print(x) # Output: Anxious @llig@tors @wkw@rdly @ssembled, e@gerly @w@iting their @fternoon @ppetizer.
Здесь мы видим, что все вхождения буквы «а» были заменены символом «@».
Функция Split() в Regex: -
Это вернет массив (список), в котором строка разбивается на основе введенных нами данных.
import re txt = "AI wrote a poem; roses are #FF0000, violets are #0000FF." x = re.split("\s", txt) print(x) # Output: ['AI', 'wrote', 'a', 'poem;', 'roses', 'are', '#FF0000,', 'violets', 'are', '#0000FF.']
В этом примере я разделяю строку в любом экземпляре пробельного символа (\s).
Классы персонажей: -
Классы символов в регулярном выражении позволяют вам определить группу символов, которым вы хотите сопоставить. Они заключаются в «[]» (квадратные скобки). Пример: регулярное выражение «[aeiou]» соответствует любой гласной в вашей строке. Вот список, чтобы лучше их понять:
Пример:
import re text = "Python has different libraries such as pandas, numpy, pytorch, scikit-learn, etc" x = re.findall(r"[^aeiou\s]", text) print(x)
Этот код удалит из строки все гласные и пробелы. Классы символов также называются наборами.
Кванторы: -
Кванторы в регулярном выражении контролируют количество вхождений предыдущего элемента. Они позволяют указать, сколько раз символ, группа или класс символов должен появляться во входной строке. Вот список, чтобы лучше их понять:
Пример:
import re text = "My email address is [email protected] and my phone number is 45" x = re.findall(r"[0-9]{3,4}", text) print(x) # Output: ['8008']
Это вернет только те цифры, которые встречаются непрерывно не менее 3 раз ИЛИ не более 4 раз.
Прогнозы: -
Просмотры — это расширенные функции регулярных выражений, которые позволяют проверять наличие шаблонов перед текущей позицией в строке, фактически не включая их в сопоставление.
Положительный просмотр вперед «(?=content)» утверждает, что указанный шаблон должен находиться перед текущей позицией в строке.
Отрицательный просмотр вперед «(?!content)» утверждает, что указанный шаблон не должен опережать текущую позицию.
Пример: Предположим, вы хотите найти все вхождения слова «ананас», только если за ним следует слово «сок».
import re text = "I love pineapple juice, but I do not like pineapple ice-cream." result = re.findall(r'pineapple(?= juice)', text) if result: print("Found 'pineapple' followed by 'juice'") print(result) else: print("No match found")
Это пример позитивного прогноза.
Осмотр: -
Lookbehinds — это расширенные функции, которые позволяют вам проверять закономерности за текущей позицией в строке.
Положительный просмотр «(?‹=content)» утверждает, что указанный шаблон должен находиться за текущей позицией.
Отрицательный просмотр «(?‹!content)» утверждает, что указанный шаблон не должен находиться за текущей позицией.
Пример: Предположим, вы хотите найти все вхождения слова «цветок», только если ему не предшествует слово «синий».
import re text = "A red flower is my favourite, but blue flower is my father's favourite." result = re.findall(r'(?<!blue )flower', text) if result: print("Found 'flower' not preceded by 'blue'") print(result) else: print("No match found")
Это пример негативного взгляда назад.
Давай попрактикуемся: -
Вот несколько сложных способов использования Regex:
Проверка электронной почты: -
import re def validate_email(email): pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$' return bool(re.match(pattern, email)) print(validate_email("[email protected]")) # True print(validate_email("invalid. Email")) # False
Удаление HTML-тегов: -
import re def remove_html_tags(text): pattern = r'<.*?>' return re.sub(pattern, '', text) html_text = "<p>This is <b>bold</b> text.</p>" print(remove_html_tags(html_text)) # Output: "This is bold text."
Извлечение данных из заданного текста: -
import re def extract_dates(text): pattern = r'\d{2}/\d{2}/\d{4}' return re.findall(pattern, text) unstructured_text = "Meeting on 12/25/2023 and 01/15/2024" print(extract_dates(unstructured_text)) # Output: ['12/25/2023', '01/15/2024']
Проверка надежности пароля: -
import re def check_password_strength(password): if re.match(r'^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)(?=.*[@#$%&\_])[A-Za-z\d@#$%&\_]{8,}$', password): return "Strong" else: return "Weak" print(check_password_strength("P@ssw0rd")) # Strong print(check_password_strength("password")) # Weak
Это регулярное выражение имеет следующие ограничения: -
- пароль должен быть длиной не менее 8 символов
- он должен содержать прописную и строчную букву
- он должен содержать хотя бы 1 цифру
- он должен содержать хотя бы 1 специальный символ (@#$%&_)
Проверка IP-адреса: -
import re def validate_ip(ip): pattern = r'^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$' return all(re.match(pattern, part) for part in ip.split('.')) print(validate_ip("192.168.1.1")) # True print(validate_ip("256.256.256.256")) # False
Токенизация: -
import re text = "He didn't want to go, but he had to. She said, 'It's time.'" tokens = re.findall(r"\b\w+(?:[-']\w+)*\b|[.,!?';]", text) print(tokens)
Токенизация может стать довольно сложной задачей при работе с различными текстовыми структурами, языками и особыми случаями. Вышеприведенный пример регулярного выражения включает совпадения дефисов и апострофов (например, «Он», «не сделал»).
Ресурсы: -
Вот несколько отличных ресурсов для практики Regex:
Питекс: -
Pythex — это редактор регулярных выражений на основе Python, в котором вы можете тестировать примеры регулярных выражений.
Рексегг: -
На этом веб-сайте вы можете найти подробные руководства по различным подтемам, связанным с регулярными выражениями (например, обратные ссылки, группировка захвата, вызовы PCRE и т. д.).
Тестер регулярных выражений ExtendsClass: -
На этом сайте вы тестируете свои шаблоны регулярных выражений. Он также поддерживает различные языки программирования, такие как Python3, Ruby, Java, PHP и т. д.
Регулярное выражение101: -
Этот веб-сайт позволяет вам протестировать шаблоны регулярных выражений. Он поддерживает такие языки программирования, как Python, Golang, Java, Rust, C# и т. д.
Шпаргалка по регулярному выражению Python: -
Документ Regex для Python.
Спасибо, что дочитали до конца, вы отлично справились с расшифровкой моей путаницы с регулярными выражениями.
Следуйте за мной в Twitter.