Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex Python:re.sub列表中包含多个项的单个项_Regex_List_Python 2.7 - Fatal编程技术网

Regex Python:re.sub列表中包含多个项的单个项

Regex Python:re.sub列表中包含多个项的单个项,regex,list,python-2.7,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”部分

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

这里有一个相当通用的方法,其中有一个元组列表,用于对每个项进行所有替换:

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
是一个内置类型名,不应用于变量。

这里有一个相当通用的方法,其中您有一个元组列表,用于对每个项进行所有替换:

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']
>>> 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())
每个元组中的第二个元素也可以是函数,因为
re.sub
允许它。我重命名了初始列表,因为
list
是一个内置类型名,不应用于变量

>>> 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())
创建一个与两个字符匹配的regexp并将其分组

首先,对于循环,迭代列表

第二个循环是每个列表项中的字符索引

搜索从进一步偏移开始的字符对

把找到的东西都存起来

创建一个与两个字符匹配的regexp并将其分组

首先,对于循环,迭代列表

第二个循环是每个列表项中的字符索引

搜索从进一步偏移开始的字符对


存储找到的任何内容

您可以在不使用正则表达式的情况下对字符进行配对:

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

您可以在不使用正则表达式的情况下对字符进行配对:

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

list
是一种内置类型。不要把它当作变量名。J.F.,Lev:谢谢你抓住了这个机会,谢谢大家的澄清和想法。实际上,我正在处理可变长度项的列表,即[abc]、[defg],我需要将操作限制为3字符项。
list
是一种内置类型。不要把它当作变量名。J.F.,Lev:谢谢你抓住了这个机会,谢谢大家的澄清和想法。实际上,我正在处理可变长度项的列表,即[abc]、[defg],我需要将操作限制为3字符项。