Найти тему
Машинное обучение

Инструкция по регулярным выржениям Python.

Оглавление

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

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

Метасимволы

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

-2

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

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

КлассыОбъяснение\ 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Возвращает объект соответствия тогда и только тогда, когда вся строка соответствует шаблону. В противном случае она вернёт значение Nonere.compileСобирает регулярное выражение в объект для будущего использования в других re-функциях. Ничего не ищет, всегда возвращает Pattern-объектre.subЗаменяет в строке string все pattern на repl. Возвращает строку в изменённом видеre.escapeВозвращает строку со всеми не алфавитно-цифровыми символами с обратным слешемre.splitРазделяет строку string по подстрокам, соответствующим patternre.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 с реальными примерами в приведённой выше шпаргалке. Я надеюсь, вы сможете использовать её в качестве краткого справочника.

#python

Наука
7 млн интересуются