Python:在字符串中搜索一个数字,减少该数字,并在字符串中替换

Python:在字符串中搜索一个数字,减少该数字,并在字符串中替换,python,Python,如果我有一个字符串,例如: string = 'Output1[10].mystruct.MyArray[4].mybool' 我要做的是在字符串中搜索数组中的数字,递减1,然后用递减的数字替换找到的数字 我所尝试的: import string import re string = 'Output1[10].mystruct.MyArray[4].mybool' pattern = r'\[(\d+)\]' num = re.findall(pattern, string) 所以,我可以

如果我有一个字符串,例如:

string = 'Output1[10].mystruct.MyArray[4].mybool'
我要做的是在字符串中搜索数组中的数字,递减1,然后用递减的数字替换找到的数字

我所尝试的:

import string
import re

string = 'Output1[10].mystruct.MyArray[4].mybool'
pattern = r'\[(\d+)\]'
num = re.findall(pattern, string)
所以,我可以得到一个数字列表,转换成整数,但我不知道如何使用re.sub搜索要替换的字符串,应该考虑可能有多个数组。如果有人是足够的专家做这件事,帮助非常感谢


干杯

我什么都不懂。。。如果有多个数组,是否要减少所有数组中的数目?或者只是其中一个

如果要在所有阵列中减少,可以执行以下操作:

import re

string = 'Output1[10].mystruct.MyArray[4].mybool'
pattern = r'\[(\d+)\]'
num = re.findall(pattern, string)
num = [int(elem) for elem in num]
num.sort()

for elem in num:
     aux = elem - 1
     string = string.replace(str(elem), str(aux))
如果只想减少第一个数组,可以这样做

import string
import re

string = 'Output1[10].mystruct.MyArray[4].mybool'
pattern = r'\[(\d+)\]'
num = re.findall(pattern, string)
new_num = int(num[0]) - 1
string = string.replace(num[0], str(new_num), 1)

多亏了@João Castilho的回答,基于此,我对其进行了轻微修改,使其完全符合我的要求:

import string
import re

string = 'Output1[2].mystruct.MyArray[2].mybool'
pattern = r'\[(\d+)\]'
num = re.findall(pattern, string)
num = [int(elem) for elem in set(num)]
num.sort()

for elem in num:
     aux = elem - 1
     string = string.replace('[%d]'% elem, '[%d]'% aux)

print(string)
现在,在所有可能出现数字的情况下,这将用递减值替换括号之间的任何数字

干杯


ice。

使用此解决方案,最终可能会将相同的值减少多次。例如:字符串包含10和9。首先将10减小到9,然后在下一步中,两个9都减小到8。还是我遗漏了什么?我用字符串
'Output1[10].mystruct.MyArray[9].mybool'
测试了您的第一个解决方案,结果是我怀疑的
'Output1[8].mystruct.MyArray[8].mybool'
。我们必须确保相同的数字不会被碰两次。@lema你完全正确。我刚刚编辑了我的回答谢谢,快到了。当索引为1时,字符串中的所有数字都将更改-因此Output1[1]将变为Output0[0]-我的印象是,当匹配进行减量,然后进行替换时,re.sub将允许进行一些奇特的计算。这似乎比我最初想象的要复杂得多。