Найдите десятичную дробь с точностью до 2 с помощью шаблона да | нет шаблона

Может кто-нибудь указать на ошибку, которую я делаю, почему 123 здесь не совпадает?

def is_decimal(num):
    import re
    pattern = re.compile(r"(\b\d+\.)(?(1)\d{1,2}\b|\d+)")
    result = pattern.search(num)
    return bool(result)


print(is_decimal('123.11'))
print(is_decimal('123'))
print(is_decimal('0.21'))

print(is_decimal('123.1214'))
print(is_decimal('e666.86'))

ожидаемый результат: True, True, True, False, False

фактический выход: True, False, True, False, False

2 ответа

Пытаться pattern = re.compile(r"(\b\d+\.*)(?(1)\d{1,2}\b|\d+)")

Вы можете попробовать следующий шаблон:

^(\d+)(\.\d{1,2})?$

Один из ключей - не использовать \b так как точка (.) также рассматривается как граница слова, которая вызывает ложный синтаксический анализ. Вместо этого вы можете использовать ^ чтобы соответствовать началу строки и $ конец строки.

Вышеупомянутый шаблон можно протестировать в интерактивном режиме на следующем веб-сайте:

https://regex101.com/r/CixCHT/4

Другие вопросы по тегам