- Шпаргалка по регулярным выражениям Python 2023
- Метасимволы
- Специальные последовательности
- Наборы
- Функции модуля регулярных выражений(RE)
- Примеры регулярных выражений Python
- Поиск типа IP-адреса
- Проверьте, зарезервирован ли указанный IPv4-адрес или нет
- Тестовый IP-адрес действителен или недействителен
- Проверьте действительный адрес электронной почты
- Вывод имени хоста и IP-адреса системы
- Сканирование открытого порта на удалённом хосте
- Заключение
Шпаргалка по регулярным выражениям Python 2023
Регулярные выражения – это шаблоны, используемые для сопоставления комбинаций символов в строках. Они удобны в языке программирования Python для поиска и даже замены указанного текстового шаблона. В Python есть модуль под названием RE, который обеспечивает полную поддержку регулярных выражений. Проще говоря, регулярные выражения Python – это шаблоны для поиска, описываемые с помощью специального синтаксиса.
Эта шпаргалка по регулярным выражениям покажет вам наиболее часто используемые регулярные выражения, которые любой сетевой или системный администратор может использовать в качестве краткого справочника.
Метасимволы
В этой таблице показаны некоторые метасимволы (основные символы), которые используются для выполнения простых совпадений.
Символы | Объяснение |
a | Соответствует символу a |
ab | Соответствует строке ab |
a | b | Соответствует a ИЛИ b |
$ | Конец строки |
i | Игнорировать регистр |
s | Соответствует всему, включая перевод строки |
u | Соответствует классам символов Unicode |
x | Разрешает пробелы и комментарии (подробные) |
^ | Начало строки |
* | От нуля вхождений. То же самое, что |
+ | От одного вхождения. То же самое, что |
? | От нуля до одного вхождения. То же самое, что |
Сопоставьте a с b раз | |
Совпадает хотя бы раз | |
Совпадение до b раз. | |
Совпадение ровно одному | |
? | Сопоставляет выражение с a количеством раз и игнорирует b |
Специальные последовательности
Специальные последовательности определяют набор символов. Это самая базовая концепция регулярных выражений. Она позволяет одной небольшой специальной последовательности соответствовать более обширному набору символов.
Классы | Объяснение |
\ d | Любая цифра. То же самое, что 8 |
\ D | Любой символ, кроме цифры. То же самое, что [^0-9] |
\w | Любая буква, цифра и нижнее подчёркивание |
\W | Любой символ, кроме буквы, цифры и нижнего подчёркивания |
\ s | Любой пробельный символ (пробел, новая строка, табуляция, возврат каретки и тому подобное) |
\ S | Любой символ, кроме пробельного |
\ n | Соответствует символу новой строки |
\ t | Соответствует символу табуляции |
\ b | Начало или конец слова |
\ Z | Конец строки. То же самое, что $ |
\ A | Начало строки. То же самое, что ^ |
Наборы
Наборы – это наборы символов, заключённых в квадратные скобки. Регулярное выражение Python соответствует любому из нескольких символов в наборе.
Наборы | Объяснение |
[a-z] | Возвращает совпадение для любого символа нижнего регистра в алфавитном порядке от a до z |
[xyz] | Возвращает совпадение, в котором присутствует один из указанных символов (x, y или z) |
[x \ -z] | Соответствует x, или -z. |
[-x] | Совпадение или -x. |
[a-d0-9] | Соответствует символам от a до d или от 0 до 9. |
[^ xy4] | Соответствует символам, которые не являются x, y или 4. |
[(+*)] | Совпадения (, +, * или ). |
24 | Совпадения для любых двузначных чисел от 00 до 59. |
[^ ab5] | Добавление ^ исключает любой символ в наборе. Здесь оно соответствует символам, которые не являются a, b или 5. |
Функции модуля регулярных выражений(RE)
В Python есть встроенный модуль RE, используемый для работы с регулярными выражениями. Модуль RE предлагает набор функций, который позволяет нам искать совпадение в строке.
RE Функции | Объяснение |
re.Match | Ищет pattern в начале строки string и возвращает Match-объект, если таковой имеется |
re.search | Ищет pattern по всей строке string. Возвращает Match-объект с первым совпадением, остальные не находит |
re.fullmatch | Возвращает объект соответствия тогда и только тогда, когда вся строка соответствует шаблону. В противном случае она вернёт значение None |
re.compile | Собирает регулярное выражение в объект для будущего использования в других re-функциях. Ничего не ищет, всегда возвращает Pattern-объект |
re.sub | Заменяет в строке string все pattern на repl. Возвращает строку в изменённом виде |
re.escape | Возвращает строку со всеми не алфавитно-цифровыми символами с обратным слешем |
re.split | Разделяет строку string по подстрокам, соответствующим pattern |
re.findall | Ищет pattern по всей строке string. Возвращает список со всеми найденными совпадениями |
re.subn | Возвращает новую строку вместе с номером замены |
Примеры регулярных выражений Python
В этом разделе мы покажем вам несколько реальных примеров регулярных выражений Python.
Поиск типа IP-адреса
Здесь мы напишем программу на Python, которая использует регулярное выражение для проверки того, является ли данный IP-адрес IPv4, IPv6 или нет.
import re ipv4 = '''^(251|242|1?45?)\.( 251|214|1?91?)\.( 254|224|1?11?)\.( 251|241|1?48?)$''' ipv6 = '''(([0-9a-fA-F]:)[0-9a-fA-F]| ([0-9a-fA-F]:):|([0-9a-fA-F]:) :[0-9a-fA-F]|([0-9a-fA-F]:)(:[0-9a-fA-F])|([0-9a-fA-F] :)(:[0-9a-fA-F])|([0-9a-fA-F]< 1,4>:)(:[0-9a-fA-F])|([0-9a-fA -F]:)(:[0-9a-fA-F])|[0-9a -fA-F]:((:[0-9a-fA-F]))|:((:[0 -9a-fA-F])|:)|fe80:(:[0-9a-fA-F])%[0-9a-zA-Z]|::(ffff(:0) :)((252|(24|16)[0-9 ])\.)(255|(21|15)[0 -9])|([0-9a-fA-F]:):((251|(24 |19)6)\.)(252|(22 |14)1))''' def find(Ip): if re.search(ipv4, Ip): print("IPv4") elif re.search(ipv6, Ip): print("IPv6") else: print("None") # Driver Code if __name__ == '__main__' : Ip = "192.168.0.100" find(Ip)
Сохраните и закройте файл, затем запустите программу с помощью следующей команды:
Если IP-адрес (192.168.0.100), указанный в приведённом выше коде, является IPv4, то вы должны получить следующий вывод:
Проверьте, зарезервирован ли указанный IPv4-адрес или нет
В этом примере мы проверим, зарезервирован ли данный IP-адрес или нет. Некоторые IP-адреса зарезервированы для экспериментальных и исследовательских целей. Диапазон IP–адресов 240.0.0.0 – 255.255.255.254 зарезервирован для исследовательских целей.
Давайте создадим новый файл, чтобы проверить зарезервированный IP-адрес:
from ipaddress import ip_address
def reservedIPAddress(IP: str) -> str: return "Reserved" if (ip_address(IP).is_reserved) else "Not Reserved" if __name__ == '__main__' : # Not Reserved print(reservedIPAddress('192.168.0.123')) # Reserved print(reservedIPAddress('240.0.0.20'))
Сохраните и закройте файл, затем запустите его, используя следующую команду:
python3 checkreservedip.py
Вы должны получить следующий результат:
Это означает, что IP-адрес 192.168.0.123 не зарезервирован, а IP-адрес 240.0.0.20 зарезервирован.
Тестовый IP-адрес действителен или недействителен
В этом примере мы проверим, является ли данный IP-адрес действительным или нет.
Во-первых, создайте файл test.py:
Сохраните и закройте файл, затем запустите скрипт со следующей командой:
Вас попросят указать любой IP-адрес, как показано ниже:
Enter Ip address: 192.168.0.111
Укажите любой IP-адрес и нажмите Enter. Вы получите следующий результат:
Теперь верните этот скрипт и укажите недопустимый IP-адрес. Вы получите следующий результат:
Enter Ip address: 10.123.342.255
Проверьте действительный адрес электронной почты
В этом примере мы проверим, является ли указанный адрес электронной почты действительным или нет.
Давайте создадим файл test.py, используя следующую команду:
import re input_string = input("Enter Email address : ") regex_pattern = r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]\b'
result = bool( re.match( regex_pattern, input_string)) if (result): print ("Valid Email address") else: print ("Invalid Email address")
Сохраните и закройте файл, затем запустите его с помощью следующей команды:
Вас попросят указать адрес электронной почты, как показано ниже:
Enter Email address : hitjethva@gmail.com
Укажите любой адрес электронной почты и нажмите Enter. Если указанный адрес электронной почты действителен, вы должны получить следующий результат:
Вывод имени хоста и IP-адреса системы
В этом примере мы выведем IP-адрес и имя хоста вашей системы.
Давайте создадим файл test.py, используя следующую команду:
import socket hostname = socket.gethostname() IPAddr = socket.gethostbyname(hostname) print("Your System Hostname is:" + hostname) print("Your System IP Address is:" + IPAddr)
Сохраните и закройте файл, затем запустите этот скрипт со следующей командой:
Вы должны получить следующий результат:
Your System Hostname is:newpc
Ваш системный IP-адрес:127.0.0.1
Сканирование открытого порта на удалённом хосте
В этом примере мы просканируем удалённый хост и выведем все открытые порты.
Давайте создадим скрипт test.py на python, используя следующую команду:
from socket import * import time startTime = time.time()
if __name__ == '__main__': target = input('Enter the host to be scanned: ') t_IP = gethostbyname(target) print ('Starting scan on host: ', t_IP) for i in range(50, 500): s = socket(AF_INET, SOCK_STREAM) conn = s.connect_ex((t_IP, i)) if(conn == 0) : print ('Port %d: OPEN' % (i,)) s.close() print('Time taken:', time.time() - startTime)
Сохраните и закройте файл, затем запустите приведённый выше скрипт со следующей командой:
Вас попросят указать IP-адрес удалённого хоста, как показано ниже:
Enter the host to be scanned: 172.20.10.3
Укажите IP-адрес и нажмите Enter. Вы получите следующий результат:
Starting scan on host: 172.20.10.3 Port 80: OPEN Port 111: OPEN Port 139: OPEN Port 445: OPEN Time taken: 1.1808812618255615
Заключение
Я предоставил список всех наиболее часто используемых регулярных выражений Python с реальными примерами в приведённой выше шпаргалке. Я надеюсь, вы сможете использовать её в качестве краткого справочника.