Skip to content

About

Функции поиска по регулярным выражениям. Покрытие тестами этих функций

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 

Repository files navigation

Задание

  • Написать функции, где будет внутри регулярное выражение
  • На эти функции сделать покрытие юнит тестами

Код оформить по PEP8

Задание 1.1

Eсть три строки вида:

--path.settings C:\Users\Administrator\ELK\logstash-8.11.1\config --another.key qweqweqwe
--path.settings "C:\Program Files\Elastic" --another.key qweqweqwe
--path.settings C:\Program Files\Elastic --another.key qweqweqwe

Регулярака должна находить путь целиком

Результат для каждого варианта

C:\Users\Administrator\ELK\logstash-8.11.1\config
C:\Program Files\Elastic
C:\Program Files\Elastic

Задание 1.2

Написать регулярку, чтобы из предоставленного конфига получить все bind - IP адреса

listen tcp_public
    mode tcp
    bind 10.0.210.252:9000,10.0.210.253:9000
    bind ipv4@172.30.148.13:443 ssl crt /etc/haproxy/site.pem
    bind ipv6@:80
    bind /var/run/ssl-frontend.sock user root mode 600 accept-proxy
    bind unix@ssl-frontend.sock user root mode 600 accept-proxy
    bind 2a00:f920:192::233:80
    server tcpsrv0 192.168.1.101:9999
    use_backend dghj

Результат:

10.0.210.252:9000,10.0.210.253:9000
ipv4@172.30.148.13:443
ipv6@:80
2a00:f920:192::233:80

Задание 1.3

Из полученных результатов "задания 2" создать коллекцию вида:

(
	{IP: 10.0.210.252, Type: ipv4, Port: 9000},
)

Где ip указан не явно нужно сделать подстановку:

  • для ip4 - значение по умолчанию 0.0.0.0
  • для ip6 - значение по умолчанию ::

Поиск пути в значении флага --path.settings

Регулярка

--path\.settings\s+\"?(([A-Za-z]:\\[^"\s]+(?:\s+[^"\s-]*)*)|(/[^"\s]+(?:\s+[^"\s-]*)*))\"?(?=\s|$|--|\s+[^-])

Объяснение частей регулярного выражения

  1. --path\.settings:

    • --path.settings — это фиксированная часть строки, которая начинается с --path и заканчивается .settings.
    • \.settings — точка перед settings экранирована, чтобы указать, что это именно точка, а не специальный символ.
  2. \s+:

    • \s+ — соответствует одному или более пробельным символам (например, пробелы, табуляция, новые строки).
  3. \"?:

    • \"? — соответствует нулю или одному символу двойной кавычки ("). Это значит, что кавычка может быть, а может и не быть.
  4. ( (начало группы):

    • Открывающая скобка ( начинает захватывающую группу, что позволяет нам позже обращаться к содержимому этой группы.
  5. (([A-Za-z]:\\[^"\s]+(?:\s+[^"\s-]*)*)|(/[^"\s]+(?:\s+[^"\s-]*)*)):

    • Это большая группа, в которой есть две альтернативы:
      • [A-Za-z]:\\[^"\s]+(?:\s+[^"\s-]*)*:
        • [A-Za-z]:\\ — соответствует пути на Windows, который начинается с буквы диска (например, C:) и заканчивается обратной косой чертой (\).
        • [^"\s]+ — соответствует одному или более символам, которые не являются кавычкой или пробелом.
        • (?:\s+[^"\s-]*)* — соответствует нулю или более повторениям пробелов, за которыми следуют символы, не являющиеся кавычками или пробелами (это делает путь более гибким, позволяя пробелы в пути).
      • | — это оператор "или", разделяющий две альтернативы.
      • (/[^"\s]+(?:\s+[^"\s-]*)*):
        • / — соответствует символу косой черты, который обычно используется в путях Unix/Linux.
        • [^"\s]+ — соответствует одному или более символам, которые не являются кавычкой или пробелом.
        • (?:\s+[^"\s-]*)* — аналогично предыдущему, позволяет пробелы в пути.
  6. \"? (закрывающая часть):

    • Закрывающая кавычка снова может присутствовать или отсутствовать, как и ранее.
  7. (?=\s|$|--|\s+[^-]):

    • Это позитивный просмотр вперед. Он проверяет, что после найденного пути есть один из следующих символов:
      • \s — пробел.
      • $ — конец строки.
      • -- — другой параметр командной строки.
      • \s+[^-] — пробелы, за которыми следует любой символ, кроме дефиса. Это позволяет избежать захвата некорректных аргументов.

Регулярное выражение позволяет захватывать и валидировать пути к файлам в различных форматах (как Windows, так и Unix/Linux) после параметра командной строки --path.settings, с возможностью обработки пробелов и кавычек.

Поиск bind - IP адреса

Так как, исходя из примера, у нас всегда указан порт у адреса, мы можем искать регуляркой подстроки, стоящие после bind (bind и пробел) и продолжающиеся до следующего (пробела) или конца строки и содержащие : (двоеточие).

Регулярка

bind\s+([^:\s]*[^:\s]*:\S*)

Объяснение частей регулярного выражения

  1. bind:

    • Это фиксированная строка, к которой должно соответствовать начало искомого выражения. Она ищет слово "bind".
  2. \s+:

    • \s+ соответствует одному или более пробельным символам (таким как пробелы, табуляция и т.д.). Это указывает, что после слова bind должно быть хотя бы одно пробельное место, прежде чем начнется следующий элемент.
  3. ( (открытие группы захвата):

    • Открывающая скобка ( начинает захватывающую группу. Всё, что внутри этой группы, будет сохранено для дальнейшего использования или проверки. Это полезно, если нам нужно извлечь часть строки, соответствующую этому выражению.
  4. [^:\s]*:

    • [^:\s]* соответствует нулю или более символам, которые не являются двоеточием (:) или пробелом (\s). Это значит, что он захватит любую строку, не содержащую пробелов и двоеточий.
    • Если строка не содержит пробелов и двоеточий, она захватывается целиком.
  5. [^:\s]* (еще раз):

    • Повторение [^:\s]* — это еще один набор символов, не содержащих пробелов и двоеточий.
    • Зачем оно здесь повторяется? Это позволяет разделить захват между первым блоком символов (без пробелов и двоеточий) и вторым, который тоже не содержит их, но может находиться перед :, что позволяет получить необходимую часть строки, если она разделена двоеточием.
  6. ::

    • Это конкретный символ двоеточия, который должен появиться после предыдущих символов.
  7. \S*:

    • \S* соответствует нулю или более непробельных символов. Здесь мы ожидаем, что после двоеточия будут идти любые символы, кроме пробелов, например, порты, идентификаторы, и т.д.
  8. ) (закрытие группы захвата):

    • Закрывающая скобка завершает группу захвата.

Тесты

Все 3 функции покрыты unit тестами.

В директории tests/test_cases содержатся тест кейсы для каждой функции

About

Функции поиска по регулярным выражениям. Покрытие тестами этих функций

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages