下面的代码是做什么的?
part = re.sub('(.{3}).', lambda match: match.group(1), mass, flags=re.DOTALL)
上述代码片段的Python 3等价物是什么?
注意,在Python 2中,mass
变量是一个字符串;而在Python 3中它是bytearray
,即b'0123456789abcdef'
有没有简单的方法来做到这一点?不使用lambda
函数?
答案 0 :(得分:3)
它匹配每四个字符,并将其替换为匹配的前三个字符。所以,它基本上会跳过每四个字符。例如
mass = "ABCDEFGHIJKL"
import re
part = re.sub('(.{3}).', lambda match: match.group(1), mass, flags=re.DOTALL)
print part
<强>输出强>
ABCEFGIJK
在输出中,您可以看到,每个第四个字符,即D
,H
和L
都缺失。
如果你想没有lambda 功能,那么你可以使用后面的匹配参考,就像这样
part = re.sub('(.{3}).', r'\1', mass, flags=re.DOTALL)
此处r'\1'
代表(.{3})
匹配的表达式,即前三个字符。
如果你只需要跳过每四个字符,你可以简单地使用一个使用理解的过滤器,然后像这样join
part = "".join([mass[i] for i in range(len(mass)) if (i + 1) % 4])