Найдите десятичную дробь с точностью до 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
так как точка (.
) также рассматривается как граница слова, которая вызывает ложный синтаксический анализ. Вместо этого вы можете использовать
^
чтобы соответствовать началу строки и
$
конец строки.
Вышеупомянутый шаблон можно протестировать в интерактивном режиме на следующем веб-сайте: