re - выделить число из строки

Я написал небольшой код. Моя цель — вывести пользователя, когда он введет число, например 5,5 или 5,5, вывести Y на консоль. Теперь, если пользователь вводит число, например 123.3 у меня работает код. Но при вводе числа типа 123,3 выдает ошибку. Можно ли это исправить?

import re
pattern = '\d{1,7}\.\d'
user = input()
if (re.search(pattern, user)):
    a = float(user)
    print(a, type(a))
    print("Y")
else:
    print("N")

Ответы (1 шт):

Автор решения: Wiktor Stribiżew

Поправьте регулярное выражение так, чтобы оно пропускало числа с запятой в качестве символа десятичной дроби, а также захватите цифры до и после него в отдельные подмаски, а затем используйте эти два значения для парсинга числа:

import re
pattern = r'^(\d{1,7})[.,](\d)$'
user = '123,3'
m = re.search(pattern, user)
if m:
    a = float(f'{m.group(1)}.{m.group(2)}')
    print(a, type(a))
    print("Y")
else:
    print("N")

См. пример работы кода.

  • ^ - начало строки
  • (\d{1,7}) - захватывающая подмаска №1 (m.group(1)): от одной до семи цифр
  • [.,] - точка или запятая
  • (\d) - захватывающая подмаска №2 (m.group(2)): одна цифра
  • $ - конец строки.
→ Ссылка