Как я могу потерять пробел между словами и не потерять между фразами

#python-3.x

#python-3.x

Вопрос:

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

я новичок в языке программирования python. Я пытался использовать функцию объединения, но я теряю все свои пробелы

 text = 'waiting / / wave / crest / / / wavelength services / / despite / / / / product / '

new_text = ''.join([i for i in new.replace(" ", "").split('') if i])

print(new_text)
  

Я хочу

 "waiting/wave/crest/wavelength services/despite/product"
  

Но я получаю

 "waiting/wave/crest/wavelengthservices/despite/product"
  

Комментарии:

1. вместо того, чтобы получать это «ожидание длины волны несмотря на продукт», я получаю это «ожидание длины волны несмотря на продукт»

2. Между фразами должен быть пробел, в то время как в словах нет пробела. т. Е. фраза — это поиск информации, а слово — это информация.

3. Звездочки использовались для замены стоп-слов

4. Теперь это должно быть понятнее… Спасибо

5. да, теперь это намного понятнее, спасибо.

Ответ №1:

Основываясь на вашем комментарии, вот не такое простое для понимания решение:

 >>> import re
>>> text = 'waiting  wave                 crest       wavelength services  despite   product  '
>>> '/'.join(re.sub(r'(w)(s{1})(w)', r'1_3', text).split()).replace('_',' ')
'waiting/wave/crest/wavelength services/despite/product'
>>>
  

Что он делает, так это сначала заменяет один пробел между двумя словами символом подчеркивания, затем разбивает предложение, затем соединяет их, разделенные косой чертой, и, наконец, заменяет подчеркивание пробелом обратно.

РЕДАКТИРОВАТЬ: Цитируя Раймонда Хеттингера: «Должен быть более простой способ»…

 >>> import re
>>> text = 'waiting  wave                 crest       wavelength services  despite   product  '
>>> re.sub(r's{2,}', '/', text.strip())
'waiting/wave/crest/wavelength services/despite/product'
  

С помощью этого последнего, strip() удаляет конечные пробелы с начала и конца text и re.sub() заменяет каждое вхождение 2 или более пробелов косой чертой.

Комментарии:

1. Спасибо, но я хочу, чтобы пространство было сохранено, например, «службы длины волны» по-прежнему должны быть «службами длины волны, поскольку между словами «длина волны» и «службы» нет *

2. Как вы отличаете это от других слов? Каково правило?

3. Предполагая, что в качестве входного текста у меня есть «* Джеймс * * * Джон Уик * * Питер * * * * «, я хочу, чтобы мой вывод был Джеймсом Джоном Уиком Питер , если вы заметили, что в первом есть несколько * с пробелами, в то время как в выводе нет пробелов, кроме Джона Уика, который был сохранен, а * уменьшен до одного

4. Мне все еще не ясно. Вы хотите сказать, что если два слова разделены всего одним пробелом, они должны оставаться вместе?

5. Да, они должны оставаться вместе как одно, если два слова разделены пробелом