2013-03-13 111 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 2013-03-13 10:09:55

+0

J.F.,列夫:感謝您的支持 – ethann 2013-03-13 23:33:34

+0

感謝所有的澄清和想法。實際上,我正在處理可變長度項目的列表,即['abc','defg'],我需要將操作限制爲3個字符的項目。 – ethann 2013-03-14 00:21:47

回答

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()) 

進行匹配兩個字符,並將它們分組

第一個for循環的正則表達式,迭代列表

在各列表項的循環第二,性格指標

搜索字符對開始於偏移量更大

存儲任何發現的東西

相關問題