2013-03-13 87 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循环的正则表达式,迭代列表

在各列表项的循环第二,性格指标

搜索字符对开始于偏移量更大

存储任何发现的东西

相关问题