Вы можете зафиксировать число и проверить длину перед добавлением 0, но вместо этого вы можете использовать это:
import re
txt = 'file8, file9, file10'
pat = r"(?<!\d)(\d)(?=,|$)"
regexp = re.compile(pat)
print(regexp.sub(r"0\1", txt))
демонстрационная версия regex101
(?<! ... )
называется отрицательным просмотром назад. Это предотвращает (отрицательное) совпадение, если шаблон после него имеет шаблон в отрицательном просмотре назад. Например, (?<!a)b
будет соответствовать всем b
в строке, за исключением случаев, когда перед ним стоит a
, что означает совпадение bb
, cb
, но не совпадение ab
. Таким образом, (?<!\d)(\d)
соответствует цифре, если перед ней нет другой цифры.
(\d)
— это одна цифра, заключенная в группу захвата, обозначаемая простыми круглыми скобками. Захваченная группа сохраняется в первой группе захвата.
(?= ... )
— положительный прогноз. Это соответствует только, если шаблон внутри положительного просмотра совпадает после шаблона перед этим положительным просмотром. Другими словами, a(?=b)
будет соответствовать всем a
в строке, только если после него стоит b
. ab
соответствует, а ac
или aa
нет.
(?=,|$)
— это положительный просмотр вперед, содержащий ,|$
, означающий либо запятую, либо конец строки.
Таким образом, (?<!\d)(\d)(?=,|$)
соответствует любой цифре, если перед ней нет цифры и есть запятая после нее, или если эта цифра находится в конце строки.
person
Jerry
schedule
03.10.2013