2024-04-20 04:46:31 发布
网友
下面的代码是做什么的?在
part = re.sub('(.{3}).', lambda match: match.group(1), mass, flags=re.DOTALL)
Python3与上面的代码片段等价什么? 注意,在python2中,mass变量是一个字符串;而在python3中它是bytearray,即b'0123456789abcdef'
mass
bytearray
b'0123456789abcdef'
有没有什么简单的方法可以做到这一点?不使用lambda函数?
lambda
它每四个字符匹配一次,并用匹配的前三个字符替换它们。所以,它基本上每四个字符跳过一次。例如
mass = "ABCDEFGHIJKL" import re part = re.sub('(.{3}).', lambda match: match.group(1), mass, flags=re.DOTALL) print part
输出
在输出中,您可以看到,每四个字符,即D、H和{}都丢失了。
D
H
如果您想在不使用lambda函数的情况下,那么可以使用对匹配的反向引用,如下所示
part = re.sub('(.{3}).', r'\1', mass, flags=re.DOTALL)
这里r'\1'表示与(.{3})匹配的表达式,这是前三个字符。
r'\1'
(.{3})
如果您只需跳过每四个字符,您可以使用comprehension简单地使用一个过滤器,然后join如下所示
join
part = "".join([mass[i] for i in range(len(mass)) if (i + 1) % 4])
它每四个字符匹配一次,并用匹配的前三个字符替换它们。所以,它基本上每四个字符跳过一次。例如
输出
^{pr2}$在输出中,您可以看到,每四个字符,即}都丢失了。
D
、H
和{如果您想在不使用lambda函数的情况下,那么可以使用对匹配的反向引用,如下所示
这里
r'\1'
表示与(.{3})
匹配的表达式,这是前三个字符。如果您只需跳过每四个字符,您可以使用comprehension简单地使用一个过滤器,然后
join
如下所示相关问题 更多 >
编程相关推荐