Шпаргалка по регулярным выражениям Python 2023

Регулярные выражения – это шаблоны, используемые для сопоставления комбинаций символов в строках. Они удобны в языке программирования Python для поиска и даже замены указанного текстового шаблона. В Python есть модуль под названием RE, который обеспечивает полную поддержку регулярных выражений. Проще говоря, регулярные выражения Python – это шаблоны для поиска, описываемые с помощью специального синтаксиса. 

Эта шпаргалка по регулярным выражениям покажет вам наиболее часто используемые регулярные выражения, которые любой сетевой или системный администратор может использовать в качестве краткого справочника.

В своем телеграм канале по Data Science и Python я публикую разбор задач с собеседований и лучшие бесплатные гайды и уроки для Python разработчиков.

Метасимволы

В этой таблице показаны некоторые метасимволы (основные символы), которые используются для выполнения простых совпадений.

СимволыОбъяснение
aСоответствует символу a
abСоответствует строке ab
a | bСоответствует a ИЛИ b
$Конец строки
iИгнорировать регистр
sСоответствует всему, включая перевод строки
uСоответствует классам символов Unicode
xРазрешает пробелы и комментарии (подробные)
^Начало строки
*От нуля вхождений. То же самое, что {0,}
+От одного вхождения. То же самое, что {1,}
?От нуля до одного вхождения. То же самое, что {0,1}
{a,b}Сопоставьте a с b раз
{a,}Совпадает хотя бы раз
{,b}Совпадение до b раз.
{a}Совпадение ровно одному
{a,b}?Сопоставляет выражение с a количеством раз и игнорирует b

Специальные последовательности

Специальные последовательности определяют набор символов. Это самая базовая концепция регулярных выражений. Она позволяет одной небольшой специальной последовательности соответствовать более обширному набору символов.

КлассыОбъяснение
\ dЛюбая цифра. То же самое, что [0-9]
\ 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.
[(+*)]Совпадения (, +, * или ).
[0-5][0-9]Совпадения для любых двузначных чисел от 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 или нет.

nano checkip.py

Добавьте следующий код:

import re
ipv4 = '''^(25[0-5]|2[0-4][0-9]|[0-1]?[0-9][0-9]?)\.(
25[0-5]|2[0-4][0-9]|[0-1]?[0-9][0-9]?)\.(
25[0-5]|2[0-4][0-9]|[0-1]?[0-9][0-9]?)\.(
25[0-5]|2[0-4][0-9]|[0-1]?[0-9][0-9]?)$'''
ipv6 = '''(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|
([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:)
{1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1
,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}
:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{
1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA
-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a
-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0
-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,
4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}
:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9
])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0
-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]
|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]
|1{0,1}[0-9]){0,1}[0-9]))'''
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)

Сохраните и закройте файл, затем запустите программу с помощью следующей команды:

python3 checkip.py

Если IP-адрес (192.168.0.100), указанный в приведённом выше коде, является IPv4, то вы должны получить следующий вывод:

IPv4

Проверьте, зарезервирован ли указанный IPv4-адрес или нет

В этом примере мы проверим, зарезервирован ли данный IP-адрес или нет. Некоторые IP-адреса зарезервированы для экспериментальных и исследовательских целей. Диапазон IP–адресов 240.0.0.0 – 255.255.255.254 зарезервирован для исследовательских целей.

Давайте создадим новый файл, чтобы проверить зарезервированный IP-адрес:

nano checkreservedip.py

Добавьте следующий код:

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

Вы должны получить следующий результат:

Not Reserved
Reserved

Это означает, что IP-адрес 192.168.0.123 не зарезервирован, а IP-адрес 240.0.0.20 зарезервирован.

Тестовый IP-адрес действителен или недействителен

В этом примере мы проверим, является ли данный IP-адрес действительным или нет.

Во-первых, создайте файл test.py:

nano test.py

Добавьте следующий код:

import re
k = 0
while k < 5 :
 i = input("\nEnter Ip address : ")
 ip = re.match("^([1][0-9][0-9].|^[2][5][0-5].|^[2][0-4][0-9].|^[1][0-9][0-9].|^[0- 9][0-9].|^[0-9].)([1][0-9][0-9].|[2][5][0-5].|[2][0-4][0-9].|[1][0-9][0-9].|[0-9][0-9].|[0-9].)([1][0-9][0-9].|[2][5][0-5].|[2][0-4][0-9].|[1][0-9][0-9].|[0-9][0-9].|[0-9].)([1][0-9][0-9]|[2][5][0-5]|[2][0-4][0-9]|[1][0-9][0-9]|[0-9][0-9]|[0-9])$",i)
 k = k + 1
 if ip:
   print ("\n=====================")
   print ("Valid IP address")
   print ("=====================")
   break
  else :
    print ("\nInvalid IP")
 else :
    print ("\nAllowed Max 5 times")

Сохраните и закройте файл, затем запустите скрипт со следующей командой:

python3 test.py

Вас попросят указать любой IP-адрес, как показано ниже:

Enter Ip address: 192.168.0.111

Укажите любой IP-адрес и нажмите Enter. Вы получите следующий результат:

=====================
Valid IP address
=====================

Теперь верните этот скрипт и укажите недопустимый IP-адрес. Вы получите следующий результат:

Enter Ip address: 10.123.342.255

Недопустимый IP-адрес

Проверьте действительный адрес электронной почты

В этом примере мы проверим, является ли указанный адрес электронной почты действительным или нет.

Давайте создадим файл test.py, используя следующую команду:

nano 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]{2,}\b'
result = bool( re.match( regex_pattern, input_string))
if (result):
  print ("Valid Email address")
else:
  print ("Invalid Email address")

Сохраните и закройте файл, затем запустите его с помощью следующей команды:

python3 test.py

Вас попросят указать адрес электронной почты, как показано ниже:

Enter Email address : hitjethva@gmail.com

Укажите любой адрес электронной почты и нажмите Enter. Если указанный адрес электронной почты действителен, вы должны получить следующий результат:

Valid Email address

Вывод имени хоста и IP-адреса системы

В этом примере мы выведем IP-адрес и имя хоста вашей системы.

Давайте создадим файл test.py, используя следующую команду:

nano test.py

Добавьте следующий код:

import socket
hostname = socket.gethostname()
IPAddr = socket.gethostbyname(hostname)
print("Your System Hostname is:" + hostname)
print("Your System IP Address is:" + IPAddr)

Сохраните и закройте файл, затем запустите этот скрипт со следующей командой:

python3 test.py

Вы должны получить следующий результат:

Your System Hostname is:newpc

Ваш системный IP-адрес:127.0.0.1

Сканирование открытого порта на удалённом хосте

В этом примере мы просканируем удалённый хост и выведем все открытые порты.

Давайте создадим скрипт test.py на python, используя следующую команду:

nano test.py

Добавьте следующий код:

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)

Сохраните и закройте файл, затем запустите приведённый выше скрипт со следующей командой:

python3 test.py

Вас попросят указать 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 с реальными примерами в приведённой выше шпаргалке. Я надеюсь, вы сможете использовать её в качестве краткого справочника.

+1
1
+1
4
+1
0
+1
0
+1
1

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *