99 / 86 / 20
Регистрация: 10.09.2019
Сообщений: 708

Задачи на регулярные выражения

18.06.2021, 15:57. Показов 11385. Ответов 11

Студворк — интернет-сервис помощи студентам
В России применяются регистрационные знаки нескольких видов.
Общего в них то, что они состоят из цифр и букв. Причём используются только 12 букв кириллицы, имеющие графические аналоги в латинском алфавите — А, В, Е, К, М, Н, О, Р, С, Т, У и Х.
У частных легковых автомобилях номера — это буква, три цифры, две буквы, затем две или три цифры с кодом региона. У такси — две буквы, три цифры, затем две или три цифры с кодом региона. Есть также и другие виды, но в этой задаче они не понадобятся.
Вам потребуется определить, является ли последовательность букв корректным номером указанных двух типов, и если является, то каким.
На вход даются строки, которые претендуют на то, чтобы быть номером. Определите тип номера. Буквы в номерах — заглавные русские. Маленькие и английские для простоты можно игнорировать.

Ввод

С227НА777
КУ22777
Т22В7477
М227К19У9
С227НА777

Вывод
Private
Taxi
Fail
Fail
Fail
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.06.2021, 15:57
Ответы с готовыми решениями:

Задачи на регулярные выражения - поиск количества слов
Слово — это последовательность из букв (русских или английских), внутри которой могут быть дефисы. На вход даётся текст, посчитайте,...

Регулярные выражения
кто знает, подскажите пожалуйста Выполнить анализ кода программы на наличие в нем всех операторов ввода информации с клавиатуры...

Регулярные выражения
Почему не выводит номер машины? Я вижу свой код так: Мы ищем в начале строки 2 символа из "", а потом 4 или 5 любых цифр У...

11
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
18.06.2021, 16:11
^\w\d\d\d\w\w\d\d\d?$

^\w\w\d\d\d\d\d\d?$
0
99 / 86 / 20
Регистрация: 10.09.2019
Сообщений: 708
18.06.2021, 17:52  [ТС]
Рыжий Лис, это простейшие регулярки, не вопрос,
как бы все это упаковать покомпактнее в функцию или в списковые включения.
Ввод через input(), методы модуля re, главное без if/else?

Добавлено через 2 минуты
Вообщем "чтоб" результ был норм для профи? "Чтоб" прям глянули на код и сказали "вау"?
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
18.06.2021, 17:54
Компактнее != быстрее

Компактнее != понятнее

Хороший код - простой код.
2
99 / 86 / 20
Регистрация: 10.09.2019
Сообщений: 708
18.06.2021, 17:57  [ТС]
Рыжий Лис, а на пайтоне, больше смысла, в плане обучения)
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
18.06.2021, 18:02
Лучший ответ Сообщение было отмечено AlexMarkov как решение

Решение

Цитата Сообщение от AlexMarkov Посмотреть сообщение
"Чтоб" прям глянули на код и сказали "вау"?
Я бы так написал:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
def get_blabla(number: str) -> str:
    """
    Вернуть тип автомобильного номера
 
    >>> get_blabla('С227НА777')
    'Private'
    >>> get_blabla('КУ22777')
    'Taxi'
    >>> get_blabla('123')
    'Fail'
 
    :param number: Предоложительно, номер машины
    :return: 'Private', 'Taxi' или 'Fail' в случае невалидного номера
    """
    if re.match(r'^\w\d\d\d\w\w\d\d\d?$', number):
        return 'Private'
    if re.match(r'^\w\w\d\d\d\d\d\d?$', number):
        return 'Taxi'
    return 'Fail'
Чем хорош такой код:
* он простой
* есть документация
* есть тесты
* они же примеры использования

Добавлено через 1 минуту
Если нужна производительность, можно вынести регулярки в re.compiile() - чуть быстрее будет работать.
1
99 / 86 / 20
Регистрация: 10.09.2019
Сообщений: 708
18.06.2021, 18:09  [ТС]
Рыжий Лис, в принципе я также) за некоторым исключением документирования строк и возвращением 'Fail'.

Добавлено через 3 минуты
В основном, все мне известно, а вот за re.compiile() отдельное спасибо.
0
18.06.2021, 18:42

Не по теме:

Цитата Сообщение от AlexMarkov Посмотреть сообщение
все мне известно
Даже то, что под капотом у регулярок? Ты меня пугаешь.

0
99 / 86 / 20
Регистрация: 10.09.2019
Сообщений: 708
18.06.2021, 18:48  [ТС]
Arsegg, )) под капотом "жесть")) для неокрепшего решением практических задач на низкоуровневом языке разума
0
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
18.06.2021, 18:54
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
from re import compile as compile_
 
 
pattern = compile_(r"^(?P<Private>\w\d\d\d\w\w\d\d\d?)|(?P<Taxi>\w\w\d\d\d\d\d\d?)|(?P<Fail>.*)$")
 
def foo(s):
    return pattern.match(s).lastgroup
    
assert foo("С227НА777") == "Private"
assert foo("КУ22777") == "Taxi"
assert foo("Т22В7477") == "Fail"
assert foo("М227К19У9") == "Fail"
assert foo("С227НА777") == "Fail"
P. S. Правда пятый assert валится.
1
99 / 86 / 20
Регистрация: 10.09.2019
Сообщений: 708
18.06.2021, 19:04  [ТС]
Arsegg, да не все норм, наверное, там пустая строка перед литерой.
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
18.06.2021, 20:40
Пожалуй, допилю до ТЗ

Цитата Сообщение от AlexMarkov Посмотреть сообщение
Причём используются только 12 букв кириллицы, имеющие графические аналоги в латинском алфавите
Python
1
2
3
4
5
6
def foo(number):
    if re.fullmatch(r'[АВЕКМНОРСТУХ]\d{3}[АВЕКМНОРСТУХ]{2}\d{2,3}', number):
        return 'Private'
    if re.fullmatch(r'[АВЕКМНОРСТУХ]{2}\d{5,6}', number):
        return 'Taxi'
    return 'Fail'
3
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.06.2021, 20:40
Помогаю со студенческими работами здесь

Регулярные выражения
Задан текстовый файл, содержащий некоторое множество строк. Требуется преобразовать каждую из этих строк в соответствии с заданным правилом...

Регулярные выражения
Всем доброго времени суток. Нужна помощь с написанием кода. Есть фрагмент файла LOG.txt, который содержит записи событий при работе...

Регулярные выражения
Коллеги, помогите пожалуйста, необходимо решить одну задачу которая поможет мне быстрее выполнять работу. Есть файл такого содержания ...

Задача на регулярные выражения
В заданной строке заменить все фрагменты вида $v_(i)$, где «i» – любая одна цифра или буква, на v. Пример. Исходная строка:...

Регулярные выражения Python
Добрый день! Помогите решить через регулярные выражения: В файле BaseFile.txt определить всех пользователей, у которых задан телефонный...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

Новые блоги и статьи
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru