Python:在列表中重新显示包含多个项目的单个项目

时间:2013-03-13 08:59:46

标签: regex list python-2.7

我是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'部分显然不起作用,只是为了蹩脚地说明这个想法。

3 个答案:

答案 0 :(得分: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']

答案 1 :(得分: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是内置类型名称,不应该用于变量。

答案 2 :(得分: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循环,每个列表项中的字符索引

搜索从偏移开始的字符对

存储找到的任何内容