Python-替换后如何恢复原始字符串?
假设原始字符串是:Python-替换后如何恢复原始字符串?,python,Python,假设原始字符串是: a = 'DA115792C339A5E674416AB0559BF5CB8D38E88B1E71F4DFAE896EBD2D13ABB13FFB1DC687DCF0C270A8BF4861D2E6D26E74DC81C18EB53FD5C52AA691A8F16BDA4E1EB8009B00DCD61457E34C438F23EF3D1FD905CF689793CC1E02E1ECB6778A1E2720D416AC432959A8A3B20B43525A856C97E4D
a = 'DA115792C339A5E674416AB0559BF5CB8D38E88B1E71F4DFAE896EBD2D13ABB13FFB1DC687DCF0C270A8BF4861D2E6D26E74DC81C18EB53FD5C52AA691A8F16BDA4E1EB8009B00DCD61457E34C438F23EF3D1FD905CF689793CC1E02E1ECB6778A1E2720D416AC432959A8A3B20B43525A856C97E4D404065D1D30ADC74D012B27D00B0029AD3940CB2C9F2AB6C01D430F3A58584C5DB6C98839579AF2A8F90A5D80B5097D547105DF2D9F9485E9F2CCFD6F9ECDDBD562FE09EA81C19B18482BD483AEBAB8481EE208887909DDAE826629538F36E6A50CEECBF3462E9FFBDAC6363F3A9A56F31081EBF28AD0FCF288B0DB8CB44735B9D7E6D193D55C90767E83'
现在,通过执行以下操作,将上述字符串中“D6”的所有实例替换为“9F”:
b = a.replace('D6','9F')
b = 'DA115792C339A5E674416AB0559BF5CB8D38E88B1E71F4DFAE896EBD2D13ABB13FFB1DC687DCF0C270A8BF4861D2E6D26E74DC81C18EB53FD5C52AA691A8F16BDA4E1EB8009B00DC9F1457E34C438F23EF3D1FD905CF689793CC1E02E1ECB6778A1E2720D416AC432959A8A3B20B43525A856C97E4D404065D1D30ADC74D012B27D00B0029AD3940CB2C9F2AB6C01D430F3A58584C5DB6C98839579AF2A8F90A5D80B5097D547105DF2D9F9485E9F2CCF9FF9ECDDBD562FE09EA81C19B18482BD483AEBAB8481EE208887909DDAE826629538F36E6A50CEECBF3462E9FFBDAC6363F3A9A56F31081EBF28AD0FCF288B0DB8CB44735B9D7E6D193D55C90767E83'
现在,假设我们只有b的值,而没有a的值。我们需要对b执行一些操作来检索a的原始值
此外,我们知道‘a’的值应该满足一定的数学条件
数学条件为:
数字z应该可以被a整除(z%a==0)
我们需要利用“a”的这个数学属性来从b恢复它
我知道我们不能使用b上的replace()函数返回“a”,因为“9F”的一些原始实例可能会被替换
我认为我们需要在不同的位置进行更换操作,直到满足该条件
对于给定字符串,我们有:
b.count('9F')
6
因此,我们必须在不同的位置组合中将“9F”替换为“D6”,直到我们得到满足数学条件的“a”和“C”
我做了这样的事情:
count = b.count('9F')
for i in range(1,count+1):
print "trying: %d" %(i)
tmp = b.replace('9F','D6',i)
num = int(tmp, 16)
if z % num == True:
print num
这似乎是与排列和组合相关的问题。在这两个操作之后,您将无法检索原始字符串,因为您的原始字符串中可能也有“9F”:
test=“D69F”
更改=测试。更换(“D6”、“9F”)
打印(已更改)
#9F9F
撤销更改=更改。替换(“9F”、“D6”)
打印(撤消更改)
#D6D6
如果它不影响中间步骤,您可以使用
test.replace(“D6”和“§9F”)
来屏蔽您的替换,例如,您的原始字符串中已经有4个的9F
实例。这些都是导致威德行为的原因
a = 'DA115792C339A5E674416AB0559BF5CB8D38E88B1E71F4DFAE896EBD2D13ABB13FFB1DC687DCF0C270A8BF4861D2E6D26E74DC81C18EB53FD5C52AA691A8F16BDA4E1EB8009B00DCD61457E34C438F23EF3D1FD905CF689793CC1E02E1ECB6778A1E2720D416AC432959A8A3B20B43525A856C97E4D404065D1D30ADC74D012B27D00B0029AD3940CB2C9F2AB6C01D430F3A58584C5DB6C98839579AF2A8F90A5D80B5097D547105DF2D9F9485E9F2CCFD6F9ECDDBD562FE09EA81C19B18482BD483AEBAB8481EE208887909DDAE826629538F36E6A50CEECBF3462E9FFBDAC6363F3A9A56F31081EBF28AD0FCF288B0DB8CB44735B9D7E6D193D55C90767E83'
print(a.count('9F'))
#4
否则,string.replace
将正常工作
a = 'hello'
b = a.replace('l','a')
print(b)
#heaao
c = b.replace('a','l')
print(c)
#hello
print( a == c)
#True
为您提供True
(将l
转换为a
,然后将a
转换为l
)
可能的解决方案是,将现有的9F
替换为字符串中不存在的内容,例如XY
,然后在替换回字符串时也使用它
a = 'DA115792C339A5E674416AB0559BF5CB8D38E88B1E71F4DFAE896EBD2D13ABB13FFB1DC687DCF0C270A8BF4861D2E6D26E74DC81C18EB53FD5C52AA691A8F16BDA4E1EB8009B00DCD61457E34C438F23EF3D1FD905CF689793CC1E02E1ECB6778A1E2720D416AC432959A8A3B20B43525A856C97E4D404065D1D30ADC74D012B27D00B0029AD3940CB2C9F2AB6C01D430F3A58584C5DB6C98839579AF2A8F90A5D80B5097D547105DF2D9F9485E9F2CCFD6F9ECDDBD562FE09EA81C19B18482BD483AEBAB8481EE208887909DDAE826629538F36E6A50CEECBF3462E9FFBDAC6363F3A9A56F31081EBF28AD0FCF288B0DB8CB44735B9D7E6D193D55C90767E83'
#Replace 9F to XY, then D6 to 9F
b = a.replace('9F','XY').replace('D6','9F')
#Replace 9F to D6, then XY to 9F
c = b.replace('9F', 'D6').replace('XY', '9F')
print(a == c)
#True
字符串中可能已有一些可用的'9F'
s。使用b.replace('9F','D6')
,您可以替换每个'9F'
s。如果a='D69F'
呢?所以b='9F9F
。因此,您必须将a
与b
进行比较,以生成c
@NeonFlashreplace
效果。这并不是这个问题的解决方案。@NeonFlash原始字符串在a
中仍然可用。我不明白这个问题。那仍然是非常模糊的。我们这里说的是什么“数学条件”?
a = 'DA115792C339A5E674416AB0559BF5CB8D38E88B1E71F4DFAE896EBD2D13ABB13FFB1DC687DCF0C270A8BF4861D2E6D26E74DC81C18EB53FD5C52AA691A8F16BDA4E1EB8009B00DCD61457E34C438F23EF3D1FD905CF689793CC1E02E1ECB6778A1E2720D416AC432959A8A3B20B43525A856C97E4D404065D1D30ADC74D012B27D00B0029AD3940CB2C9F2AB6C01D430F3A58584C5DB6C98839579AF2A8F90A5D80B5097D547105DF2D9F9485E9F2CCFD6F9ECDDBD562FE09EA81C19B18482BD483AEBAB8481EE208887909DDAE826629538F36E6A50CEECBF3462E9FFBDAC6363F3A9A56F31081EBF28AD0FCF288B0DB8CB44735B9D7E6D193D55C90767E83'
#Replace 9F to XY, then D6 to 9F
b = a.replace('9F','XY').replace('D6','9F')
#Replace 9F to D6, then XY to 9F
c = b.replace('9F', 'D6').replace('XY', '9F')
print(a == c)
#True