Regex Python:re.sub列表中包含多个项的单个项
我是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”部分
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字符项。