【问题标题】:lambda function with re.sub in Python 3 [closed]Python 3中带有re.sub的lambda函数[关闭]
【发布时间】:2013-12-11 03:27:37
【问题描述】:
  1. 下面的代码是做什么的?

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

  3. 是否有任何简单的方法来完成上述操作?不使用lambda 函数?

【问题讨论】:

  • 你在几个例子上试过了吗?你检查过 re 模块的 python 文档吗?

标签: python regex python-3.x lambda


【解决方案1】:
  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])
    

【讨论】:

  • 好答案。但是,它只适用于字符串。这里,“质量”变量是二进制(字节数组),即 b'ABCDEFGHIJKL'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多