2016-08-03 2 views
-3

Я хочу изменить 'a,b,c,d,e,f,g,e' на 'a,[email protected],[email protected],[email protected],e'.Я хочу добавить строку @ в каждую вторую запятую

Вход:

'a,b,c,d,e,f,g,e' 

Выход:

'a,[email protected],[email protected],[email protected],e' 

Возможно ли это?

+2

Пожалуйста понятнее: показать нам (я) ясно 'input' примеры и' output' примеры и (б), что вы уже пробовали (ваш код). Вы также можете прочитать [эту страницу о том, как задать вопрос] (http://stackoverflow.com/help/mcve). –

ответ

1

Для любителей регулярных выражений:

import re 

input = 'a,b,c,d,e,f,g,e' 

output = re.sub(r',([^,]*),', r',\[email protected]', input) 
+0

самый простой. Мне нравится это спасибо –

+0

вы можете объяснить мне 'r ', \ 1 @''. Я знаю, что r - это строка поиска. @ Is replace. r ?? –

+0

«r» перед строкой означает «raw». Необработанная строка не интерпретирует символ \ как escape-символ. Я мог бы написать это как ', \\ 1 @' вместо r ', \ 1 @'. – Cabu

0
a = 'a,b,c,d,e,f,g,e' 


b = a.split(',') 

it = iter(b[ 1: -1]) 

result = [] 

while True: 
    try: 
     result.append("{0}@{1}".format(next(it), next(it))) 
    except StopIteration: 
     break 

print(",".join([b[0]] + result + [b[-1]])) 

Выход:

a,[email protected],[email protected],[email protected],e 
+0

Это ошибка 'result.append (" {0} @ {1} ". Format (it.next(), it.next())) AttributeError: объект 'list_iterator' не имеет атрибута 'next'' –

+0

this не является атрибутом, это метод. Возможно, вам здесь не хватает скобок. используйте 'next()', а не 'next' –

+0

Я использовал next(), и я использую python3. –

1

Вы можете попробовать это, хотя его немного комплекса:

a = 'a,b,c,d,e,f,g,e' 
l = a.split(',') 
res=''.join([i+',' if num%2==0 else i+'@' for num,i in enumerate(l)]).strip('@').strip(',') 
1

Да можно, вот еще один метод, который просто включает в себя создание новой строки и изменение того, что добавляется в зависимости от состояния.

def func(s): 
    res = '' 
    i = 0 
    for c in s: 
     if c == ',': 
      i += 1 
     res += '@' if c == ',' and i % 2 == 0 else c 
    return res 

>>> a = 'a,b,c,d,e,f,g,e' 
>>> func(a) 
'a,[email protected],[email protected],[email protected],e' 
1

Вы можете использовать ступенчатую нарезку, zip и str.join для достижения этой цели довольно легко.

a = 'a,b,c,d,e,f,g,e' 

pairs = zip(a.split(',')[::2], a.split(',')[1::2]) 
print '@'.join(','.join(p) for p in pairs) 
# a,[email protected],[email protected],[email protected],e 

Это предполагает, что существует нечетное число запятых и «пары» предназначены для разграничены @ (как отмечено в комментарии).

+0

Мне нравится это решение и нахожу его очень pythonic, но если вы запустите его на «a, b, c, d, e, f, g», вы получите только «a, b @ c, d @ e, f» и not 'a, b @ c, d @ e, f @ g' – Cabu

+0

@Cabu Я добавил примечание, что он работает только для спаривания. –

+0

У меня плохое. Не прочитал это до конца :( – Cabu

Смежные вопросы