Есть ли причина не просто заменить ВСЕ пробелы неразрывными? (r/ / /
).
Это не изменит внешний вид обычного английского текста (кроме случаев, когда в источнике были лишние двойные пробелы), и ваши блоки кода будут отображаться правильно.
Ради забавы, моя попытка в Python:
>>> eight_spaces = " hello world!"
>>> re.sub(r"^(|(?: )*)\s",r"\1 ",eight_spaces)
' hello world!'
Идея заключается в замене одного пробела за раз. Он не работает, потому что движок re
не возвращается к началу строки после совпадения - он потребляет строку, работающую слева направо.
Обратите внимание на чередование (?: )*
с пустой строкой (|(?: )*)
, так что группа захвата \1
всегда захватывает что-то (даже пустую строку.)