在Python 3中使用re.sub的lambda函数

时间:2013-12-11 03:27:37

标签: python regex python-3.x lambda

  1. 下面的代码是做什么的?

    part = re.sub('(.{3}).', lambda match: match.group(1), mass, flags=re.DOTALL)
    
  2. 上述代码片段的Python 3等价物是什么? 注意,在Python 2中,mass变量是一个字符串;而在Python 3中它是bytearray,即b'0123456789abcdef'

  3. 有没有简单的方法来做到这一点?不使用lambda函数?

1 个答案:

答案 0 :(得分:3)

  1. 它匹配每四个字符,并将其替换为匹配的前三个字符。所以,它基本上会跳过每四个字符。例如

    mass = "ABCDEFGHIJKL"
    import re
    part = re.sub('(.{3}).', lambda match: match.group(1), mass, flags=re.DOTALL)
    print part
    

    <强>输出

    ABCEFGIJK
    

    在输出中,您可以看到,每个第四个字符,即DHL都缺失。

  2. 如果你想没有lambda 功能,那么你可以使用后面的匹配参考,就像这样

    part = re.sub('(.{3}).', r'\1', mass, flags=re.DOTALL)
    

    此处r'\1'代表(.{3})匹配的表达式,即前三个字符。

  3. 如果你只需要跳过每四个字符,你可以简单地使用一个使用理解的过滤器,然后像这样join

    part = "".join([mass[i] for i in range(len(mass)) if (i + 1) % 4])