Страницы

Поиск по вопросам

воскресенье, 9 февраля 2020 г.

Проверка строки на наличие недопустимых символов

#python #python_3x


Мы получаем строку из файла "input"
Надо проверить на наличие недопустимых символов
В качестве первого символа могут выступать только русские буквы (большие и маленькие)
Последующие символы могут быть русскими буквами (маленькими), знаками препинания
(список знаков: !?:;"'., ), пробелами или цифрами

Придумал алгоритм (пока что только на словесном)
Если первый символ не относится к русским буквам, то выводим "текст некорректен"
Иначе если все символы начиная со второго относятся к знакам или буквам, то выводим
"текст корректен"
Иначе выводим "текст некорректен"

Вопрос в том, как можно создать "множество" символов и "множество" знаков(препинания,
чисел и пробелов)?
    


Ответы

Ответ 1



Приведу пример проверки через регулярные выражения: import re def is_ok(text): match = re.match("""^[а-яА-ЯёЁ][а-яё0-9 !?:;"'.,]+$""", text) return bool(match) if __name__ == '__main__': ok_texts = ['Привет;', 'привет;', 'привет, пока;', 'привет? пока;', 'привет 123;'] for text in ok_texts: print(is_ok(text), text) print() not_ok_texts = ['прИвет;', '1привет;', 'hello;', 'прИВет (пока);', 'Привет (пока);'] for text in not_ok_texts: print(is_ok(text), text) Консоль: True Привет; True привет; True привет, пока; True привет? пока; True привет 123; False прИвет; False 1привет; False hello; False прИВет (пока); False Привет (пока); Спасибо Игорь Игоряныч за примеры!

Ответ 2



import string first_let, *others = input() rus_lower = set('аоуыэяеёюибвгдйжзклмнпрстфхцчшщ') rus_upper = set('АОУЫЭЯЕЁЮИБВГДЙЖЗКЛМНПРСТФХЦЧШЩ') # разрешенные символы symbols = set('!?:;"., ').union(string.digits) if first_let not in rus_lower.union(rus_upper): print('Первый символ введен не корректно') if set(others).difference(set.union(rus_lower, symbols)): print('Введен не корректный символ') Корректный ввод: Привет; привет; привет, пока; привет? пока; привет 123; Не корректный ввод: прИвет; 1привет; hello; прИВет (пока); Привет (пока);

Комментариев нет:

Отправить комментарий