Squeak.ru - шаблоны программирования

Выборочное удаление пробелов в строке

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

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

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

'[AAAAA     BBBBBBBB   AAAAA]'

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



Ответы:


1

Используя 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]'

Вышеуказанные шаги можно объединить, используя объединение регулярных выражений и цепочку операций re.sub и str.replace.

s = re.sub('((?<=\[) +)|( +(?=\]))|((?<! ) (?! ))', '', s).replace('  ', ' ')
24.05.2018
Новые материалы

Угловая структура архитектуры
Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

«Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

Создайте API с помощью Python FastAPI
Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

Веселье с прокси-сервером JavaScript
Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...