用字符串长度

时间:2018-01-24 17:55:36

标签: python regex string

说我有以下字符串:

mystr = "6374696f6e20????28??????2c??2c????29"

我想要更换" ??"的每一个序列。它的长度\ 2。因此,对于上面的示例,我希望得到以下结果:

mystr = "6374696f6e2022832c12c229"

含义:

  • ????已替换为2
  • ??????已替换为3
  • ??已替换为1
  • ????已替换为2

我尝试了以下但我不确定它是不错的方法,无论如何 - 它不起作用:

regex = re.compile('(\?+)')
matches = regex.findall(mystr)
if matches:
        for match in matches:
                match_length = len(match)/2
                if (match_length > 0):
                        mystr= regex .sub(match_length , mystr)

1 个答案:

答案 0 :(得分:3)

您可以在Python re.sub中使用回调函数。仅供参考lambda expressions是创建匿名函数的简写。

See code in use here

import re

mystr = "6374696f6e20????28??????2c??2c????29"
regex = re.compile(r"\?+")

print(re.sub(regex, lambda m: str(int(len(m.group())/2)), mystr))

???的情况下,应该发生什么似乎存在不确定性。上面的代码将导致1,因为它转换为int。如果没有int转换,结果将为1.0。如果您希望???成为1?,则可以改为使用模式(?:\?{2})+