Skip to main content
 首页 » 编程设计

Python正则表达式并替换为递增的数字

2025年05月04日26me-sa

我有一个文件,其中包含几行有问题的语法,我想找到所有出现的地方并用可接受的语法替换它。

例子:

<field id="someId" type="xs:decimal" bind="someId"> 
    <description/> 
    <region id="Calc.R_315.`0" page="1"/> 
    <region id="Calc.R_315.`1" page="1"/> 
</field> 

我想用字符串替换所有出现的

<dot><tick><number> i.e. .`0 or .`1 or .`2 et cetera 

与

<dash><number> i.e. -1 or -2 or -3 

注意它从 1 而不是 0 开始。

我有以下 python 代码执行内联替换,但是它从 0 开始,我希望它从 1 开始。

with fileinput.input(files="file.xml", inplace=True, backup='.original.bak', mode='r') as f: 
    for line in f: 
        pattern = "\.`(\d+)" 
        result = re.sub(pattern, lambda exp: "-{}".format(exp.groups()[0]), line) 
        print(result, end='') 

如何实现我的目标?

请您参考如下方法:

您自己就快找到解决方案了!

唯一剩下的就是将捕获的数字转换为一个int,然后将其加1。很简单!

所以相关的代码行变成:

result = re.sub(pattern, lambda exp: "-{}".format(int(exp.groups()[0]) + 1), line) 


另一个可以进行的细微修改是将 .groups()[0] 更改为 .group(1)。您可以在 documentation 中了解有关 group 及其用法的更多信息.

最后一件事:最好将正则表达式模式定义为原始字符串,以避免将来出现任何麻烦。