说我有以下字符串:
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)
答案 0 :(得分:3)
您可以在Python re.sub中使用回调函数。仅供参考lambda expressions是创建匿名函数的简写。
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})+
。