Выборочное удаление пробелов в строке - PullRequest
0 голосов
/ 24 мая 2018

У меня есть строка в следующем формате:

'[        A A A A A          B B B B B B B B      A A A A A         ]'

Я хочу, чтобы пробелы до начала и после конца были полностью удалены, но промежутки между ними должны быть уменьшены вдвое.Таким образом, результат должен выглядеть следующим образом:

'[AAAAA     BBBBBBBB   AAAAA]'

Между каждым из символов есть один пробел, который должен быть удален.Пространство между отдельными словами должно быть уменьшено вдвое.В приведенном выше примере пространство между AAAA и BBBBBBBB составляет 10 пробелов.Но в выводе мне нужно, чтобы это были AAAA и BBBBBBBB, разделенные 5 пробелами.

1 Ответ

0 голосов
/ 24 мая 2018

Используя 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('  ', ' ')
...