Существует короткое регулярное выражение, на которое вы можете положиться для сопоставления границы между буквами и цифрами (на любом языке):
\d(?=[^_\d\W])|[^_\d\W](?=\d)
Демонстрационная версия
Разбивка :
\d
Совпадение цифры
(?=[^_\d\W])
Перед письмом от языка
|
или
[^_\d\W]
Соответствует букве из языка
(?=\d)
Предшествующая цифра
Python:
re.sub(r'\d(?![_\d\W])|[^_\d\W](?!\D)', r'\g<0> ', str, flags = re.UNICODE)
Но согласно этому ответу , это правильный путь для выполнения этой задачи:
re.sub(r'\d(?=[آابپتثجچحخدذرزژسشصضطظعغفقکگلمنوهی])|[آابپتثجچحخدذرزژسشصضطظعغفقکگلمنوهی](?=\d)', r'\g<0> ', str, flags = re.UNICODE)