Это регулярное выражение очень излишне. Попробуйте это:
>>> import re
>>> re.compile(r"(\d{0,4}[1-9])0*$")
Приведенное выше регулярное выражение предполагает, что число является действительным (например, оно также будет соответствовать «abc 012345 0».) Если вам действительно нужна проверка на отсутствие нецифровых символов, вы может использовать это:
>>> import re
>>> re.compile(r"^\d*?(\d{0,4}[1-9])0*$")
В любом случае, \d
не обязательно должен находиться в классе символов, и квантификатор {0,4}
не нужно заставлять быть жадным (как указывает дополнительный +
, хотя, очевидно, Python не распознает, что .)
Кроме того, во втором регулярном выражении \d
не является жадным, так как я считаю, что это улучшит производительность и точность. Я также сделал это "ноль или больше", поскольку я предполагаю, что это то, что вы хотите.
Я также добавил якоря, так как это гарантирует, что ваше регулярное выражение не будет совпадать с чем-либо в середине строки. Если это то, что вы хотели (хотя вы сканируете длинный текст?), Удалите якоря.