Как заменить каждый второй пробел через запятую - PullRequest
1 голос
/ 23 мая 2019

У меня есть строка с именами и фамилиями, разделенными пробелом.Например:

installers = "Joe Bloggs John Murphy Peter Smith"

Теперь мне нужно заменить каждый второй пробел на ',' (запятая с последующим пробелом) и вывести его в виде строки.

Требуемый вывод -

print installers 
Joe Bloggs, John Murphy, Peter Smith

Ответы [ 2 ]

3 голосов
/ 23 мая 2019

Вы должны быть в состоянии сделать это с помощью регулярного выражения, которое находит пробелы и заменяет последнее:

import re
installers = "Joe Bloggs John Murphy Peter Smith"
re.sub(r'(\s\S*?)\s', r'\1, ',installers)
# 'Joe Bloggs, John Murphy, Peter Smith'

Здесь написано: найдите пробел, за которым следуют некоторые непробелы, за которыми следует пробел, и замените его найденным пробелом, за которым следуют некоторые пробелы и ",". Вы можете добавить installers.strip(), если есть возможность завершить пробел в строке.

2 голосов
/ 23 мая 2019

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

names = installers.split()
it = iter(names)
out = []
for name in it:
    next_name = next(it)
    full_name = '{} {}'.format(name, next_name)
    out.append(full_name)
fixed = ', '.join(out)
print fixed

'Joe Bloggs, John Murphy, Peter Smith'

Однострочная версия этого будет

>>> ', '.join(' '.join(s) for s in zip(*[iter(installers.split())]*2))
'Joe Bloggs, John Murphy, Peter Smith'

это работает путем создания списка, который дважды содержит один итератор , поэтому функция zip возвращает обе части имени. См. Также рецепт группировщика из рецептов itertools .

...