2013-03-13 2 views
1

Я новичок в Python и пытаюсь использовать re.sub или другой подход для поиска отдельных элементов в списке и замены несколькими элементами. Например:Python: re.sub отдельный элемент в списке с несколькими элементами

import re 
list = ['abc', 'def'] 
tolist = [] 
for item in list: 
    a = re.sub(r'^(.)(.)(.)$', '\\1\\2', '\\2\\3', item) 
    tolist.append(a) 
print tolist # want: ['ab', 'bc', 'de', 'ef'] 

Применение '\ 1 \ 2', '\ 2 \ 3' часть явно не работает, только там неубедительно проиллюстрировать эту идею.

+0

'list' является встроенным типом. Не используйте его как имя переменной. – jfs

+0

J.F., Lev: Спасибо, что поймали это – ethann

+0

Спасибо всем за разъяснения и идеи. На практике я работаю со списками элементов переменной длины, т. Е. ['Abc', 'defg'], и мне нужно ограничить операцию 3-символьными элементами. – ethann

ответ

1

Можно пара символов без регулярных выражений:

lst = ['abc', 'def'] 
result = [a+b for chars in lst for a, b in zip(chars, chars[1:])] 
print(result) 
# -> ['ab', 'bc', 'de', 'ef'] 
0

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

In [1]: import re 

In [2]: subs = [(r'^(.)(.)(.)$', r'\1\2'), (r'^(.)(.)(.)$', r'\2\3')] 

In [3]: inlist = ['abc', 'def'] 

In [4]: [re.sub(*sub, string=s) for s in inlist for sub in subs] 
Out[4]: ['ab', 'bc', 'de', 'ef'] 

Второй элемент в каждом кортеже также может быть функцией, поскольку re.sub позволяет Это. Я переименовал ваш первоначальный список, потому что list - это встроенное имя типа и не должно использоваться для переменных.

0
>>> res = [] 
>>> m = re.compile('(..)') 
>>> for items in list: 
... for p in range(0,len(items)): 
...  r = m.search(items[p:]) 
...  if r != None: 
...  res.append(r.group()) 

сделать регулярное выражение, которое соответствует двум символам и группирует их

первый цикл, просматривать список

второй цикл, индексы символов в каждом элементе списка

поиск персонажа пары, начинающиеся с дальнейших смещений

магазин ничего не найдено

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