Используя re.sub
, вам понадобится несколько шаблонов регулярных выражений для этого.Вот шаги и преобразование, применяемое к вашей строке на каждом шаге.
import re
s = '[ A A A A A B B B B B B B B A A A A A ]'
# Using a lookbehind, we remove spaces preceeded by a [
s = re.sub('(?<=\[) +', '', s)
# s: '[A A A A A B B B B B B B B A A A A A ]'
# Using a lookahead, we remove spaces followed by a ]
s = re.sub(' +(?=\])', '', s)
# s: '[A A A A A B B B B B B B B A A A A A]'
# Using a lookaround, we remove space not followed or preceeded by another space
s = re.sub('(?<! ) (?! )', '', s)
# s: '[AAAAA BBBBBBBB AAAAA]'
# Finally, we use str.replace to cut out half of the spaces
s = s.replace(' ', ' ')
print(s) # '[AAAAA BBBBBBBB AAAAA]'
Вышеуказанные шаги можно объединить с помощью объединения regexp и объединения операций re.sub
и str.replace
.
s = re.sub('((?<=\[) +)|( +(?=\]))|((?<! ) (?! ))', '', s).replace(' ', ' ')