Вы получите этот результат, потому что шаблон ,([0-9]),
соответствует запятой, одной цифре, запятой.В этой строке (где вы также добавили запятую) ,0,1,2,3,4,5,6,7,8,
может соответствовать только ,0,
, а затем ,2,
и т. Д.
Для заполнения однозначных чисел одним пробелом,Вы могли бы упростить свой сценарий, исключив использование полосы и добавляя запятые и используя вместо этого положительный взгляд на шаблон.
Обратите внимание, что использование квантификатора {1}
можно опустить.
,([0-9])(?=,)
Regex demo | Python demo
Например
import re
s = '0,1,2,3,4,5,6,7,8,9,28,29,30,31,32,33,34,35'
regex = r',([0-9])(?=,)'
s = re.sub(regex, r', \1', s)
print(s)
Выход
0, 1, 2, 3, 4, 5, 6, 7, 8, 9,28,29,30,31,32,33,34,35
Если вы также хотите поддерживать заполнение только одной цифрой, вы можете обновитьположительное ожидание в конце соответствует либо запятой, либо утверждению конца строки:
,([0-9])(?=,|$)
Regex demo
Edit
Поскольку вы также хотите добавить и добавить запятую и дополнить первые цифры, вы можете обновить шаблон до (?:,|^)([0-9])(?=,|$)
import re
s = '0,1,2,3,4,5,6,7,8,9,28,29,30,31,32,33,34,35'
s = ',' + s + ','
s = re.sub(r'(?:,|^)([0-9])(?=,|$)', r', \1', s)
s = s.strip(',')
print(s)
Output
0, 1, 2, 3, 4, 5, 6, 7, 8, 9,28,29,30,31,32,33,34,35
Демо Python