Простой способ удалить несколько пробелов в строке?

Необходимо использовать "кавычки" вокруг свойств, которые содержат что-либо кроме словесных символов

{foo-bar: 3} // invalid
{"foo-bar": 3} // valid

, Кроме которого нет никакого различия между двумя, и я вообразил бы оба пути работой через все браузеры

337
задан martineau 6 November 2017 в 10:07
поделиться

5 ответов

>>> import re
>>> re.sub(' +', ' ', 'The     quick brown    fox')
'The quick brown fox'
447
ответ дан 23 November 2019 в 00:39
поделиться

foo is your string:

" ".join(foo.split())

Be warned though this removes "all whitespace characters (space, tab, newline, return, formfeed)". (Thanks to hhsaffar, see comments) ie "this is \t a test\n" will effectively end up as "this is a test"

492
ответ дан 23 November 2019 в 00:39
поделиться

Similar to the previous solutions, but more specific: replace two or more spaces with one:

>>> import re
>>> s = "The   fox jumped   over    the log."
>>> re.sub('\s{2,}', ' ', s)
'The fox jumped over the log.'
12
ответ дан 23 November 2019 в 00:39
поделиться
import re
s = "The   fox jumped   over    the log."
re.sub("\s\s+" , " ", s)

или

re.sub("\s\s+", " ", s)

, поскольку пробел перед запятой указан как любимая мозоль в PEP8, как упомянул лось в комментариях.

80
ответ дан 23 November 2019 в 00:39
поделиться

Придется согласиться с приведенным выше комментарием Пола Макгуайра. Для меня

' '.join(the_string.split())

намного предпочтительнее, чем извлечение регулярного выражения.

Мои измерения (Linux, Python 2.5) показывают, что разделение-затем-соединение выполняется почти в 5 раз быстрее, чем выполнение «re.sub (...)», и все же в 3 раза быстрее, если предварительно скомпилировать регулярное выражение один раз и проделайте операцию несколько раз. И это во всяком случае легче понять - намного более питоническое.

41
ответ дан 23 November 2019 в 00:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: