Замена пробелов в элементах списка - PullRequest
1 голос
/ 23 октября 2010

У меня есть список тегов:

>>> tags_list
['tag1', 'second tag', 'third longer tag']

Как заменить пробелы в каждом элементе списка на «+»?Я пытался сделать это с помощью регулярных выражений, но каждая строка остается неизменной:

for tag in tags_list:
    re.sub("\s+" , " ", tag)

Что не так с моим подходом?

РЕДАКТИРОВАТЬ:

Да, я забыл упомянутьто, что между словами в каждом теге мы можем иметь несколько пробелов, а теги могут начинаться или заканчиваться пробелами, поскольку они анализируются из строки, разделенной запятыми, с помощью split (","): ("Первый тег, второй тег,третий тег ").Извините за недостаточную точность.

Ответы [ 3 ]

6 голосов
/ 23 октября 2010

re.sub () возвращает новую строку, она не изменяет свой параметр на месте.

Вы, вероятно, хотите:

tags_list = [re.sub(r"\s+", "+", tag) for tag in tags_list]

Кроме того, не забудьте r перед регулярным выражением, иначе вам придется удвоить все обратные косые черты внутри (т. Е. Опубликованное вами регулярное выражение не будет работать).

РЕДАКТИРОВАТЬ: Я предполагаю, replace whitespaces within each element of the list with "+" означает свертывание всех последовательных пробелов в один + символ. Если нет, используйте r"\s" вместо r"\s+".

2 голосов
/ 23 октября 2010

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

>>> tags = ['tag1', 'second tag', 'third longer tag']
>>> [re.sub(r'\s+', '+', i.strip()) for i in tags]
['tag1', 'second+tag', 'third+longer+tag']
>>> tags
['tag1', 'second tag', 'third longer tag']
0 голосов
/ 23 октября 2010
>>> tags = ['tag1', 'second tag', 'third longer tag']
>>> [ '+'.join(i.split()) for i in tags ]
['tag1', 'second+tag', 'third+longer+tag']
...