Код: Выделить всё
t = re.split(r'([!\s])', "Hello! How are you?")
print(t)
Код: Выделить всё
['Hello', '!', '', ' ', 'How', ' ', 'are', ' ', 'you?']
В вопросе «Почему в результатах разделения() возвращаются пустые строки?» в этом ответе говорится, что это позволяет методу join отменить разделение.
Например:
Код: Выделить всё
a = '/segment/segment/'.split('/')
print(a)
# ['', 'segment', 'segment', '']
"/".join(a)
# '/segment/segment/'
"/".join([ch for ch in a if ch])
# 'segment/segment'
Код: Выделить всё
t = re.split(r'([!\s])', "Hello! How are you?")
print(t)
# ['Hello', '!', '', ' ', 'How', ' ', 'are', ' ', 'you?']
t1 = "".join(t)
print(t1)
# 'Hello! How are you?'
stripped = [ch for ch in t if ch]
print(stripped)
# ['Hello', '!', ' ', 'How', ' ', 'are', ' ', 'you?']
t2 = "".join(stripped)
print(t2)
# Hello! How are you?
t1==t2
# True
Вопрос в том, почему вообще существует пустая строка.
Этот вопрос также не является дубликатом вопроса «Почему в начале и конце списка, возвращаемого re.split», есть лишние пустые строки? поскольку в этом случае пустые строки фактически необходимы для восстановления исходной строки, поскольку ОП этого вопроса не использовал группы захвата и поэтому разделители не сохранялись, а здесь мы используем группу захвата для сохранения разделителей.