В приведенном примере
re.sub(r"(\w)([A-Z])", r"\1 \2", "WordWordWord")
^||^||||||| ||||| < Первая группа
^^ ||||||| ||||| < Эквивалентно диапазонам [A-Za-z0-9_]
^|||||^ ||||| < Вторая группа
^^^^^ ||||| < диапазон латинских буквенных символов в верхнем регистре
^^||| < возвращаем первую группу
^|| < пробел
^^ < возвращаем вторую группу
re.sub
- Возвращает новую строку, полученную в результате замены по указанному шаблону
re.sub("шаблон замены", "на что меняем", "данные для изменения")
r""
- текст в raw, считать спецсимволы обычным текстом
>>>print("\ttext")
<<< text
>>>print(r"\ttext")
<<<\ttext
При запуске изначальной команды текст WordWordWord
заменится на Word Word Word
Вопрос в том, как должна работать замена текста в случае встречи текста где все буквы пишутся в верхнем регистре, для примера WORD
, данное регулярное выражение установит пробелы следующим образом: W OR D
.
Для того, что бы разделение проходило под одиночные символы, вторую часть выражения следует заменить на позитивный просмотр вперед и убрать подстановку второй группы, так как ее больше не существует:
re.sub(r"(\w)(?=[A-Z])", r"\1 ", "WORD")
^^
результатом в данном случае будет W O R D