Обратите внимание, что ожидаемый вывод содержит пробелы только до дерева и ab c, но все остальные пробелы (например, после банан и между ]
и [
) исчезли.
Это означает, что вы действительно хотите:
Удалить все пробелы в скобках.
Удалите все оставшиеся пробелы (вне скобок), если после них не стоит буква (не символ без пробелов).
Обратите также внимание, что ваш текст содержит «парные» скобки, то есть после [
(и нескольких символов без скобок) появляется ]
, но не другой [
(я хочу использовать это Feature).
Шаблоны для определения обоих вышеупомянутых случаев:
pat1 = re.compile(r'\s+(?=[^\[]*\])')
\s+
- последовательность пробелов, (?=...)
- с последующим (положительный прогноз): [^\[]*
- возможно, пустая последовательность символов, отличных от [
, \]
- и закрывающая скобка. * 10 51 *
pat2 = re.compile(r'\s+(?![a-z])', re.I)
\s+
- последовательность пробелов, (?![a-z])
- без буквы (отрицательный взгляд), * 1064 * re.I
- без учета регистра.
Чтобы выполнить пошаговое преобразование, вы можете запустить:
t1 = pat1.sub('', orig_text)
print('step 1:', t1)
t2 = pat2.sub('', t1)
print('step 2:', t2)
получить:
step 1: banana [pastapause] [12haha] [authorbird] tree [red] abc [blue]
step 2: banana[pastapause][12haha][authorbird] tree[red] abc[blue]
Или вы можете сделать целое преобразование в одном go, выполнив:
pat2.sub('', pat1.sub('', orig_text))