Python 正则表达式替换(多行,仅部分)

Python regex substitution (multiline, only partial)

我在此站点上搜索了我的问题的答案。已回答如下问题:

但我无法将信息转化为我的问题,所以:

我需要替换文本文件中的特定值。文件结构如下所示:

black
{
    part cone;
    value 20;
}
yellow
{
    part wing;
    value 30;
}

在 GUI 中,用户定义颜色和新值。例如:black = 30。如果用户启动脚本,输入值为 a="black"b=30.

我的一段代码:

dpd=open("colors","r+")
ft=dpd.read()
ft_new=re.sub(???,???,ft)
dpd.seek(0)
dpd.write(ft_new)
dpd.truncate()
dpd.close()

我试过这样的事情:

re.sub(str(a)+'\n.*\n.*\n.*value [0-9][0-9]?',str(a)+'\n.*\n.*\n.*?value '+str(b),ft)

但这不起作用。我了解如何替换单个字符串,但不知道如何替换文件中特定位置的特定值。

您可以使用

ft_new = re.sub(r'(?m)^({}\n{{\n.*\n\s*value\s+)\d+'.format(a), r'\g<1>{}'.format(b), ft)

图案看起来像

(?m)^(black\n{\n.*\n\s*value\s+)\d+

regex demo

详情

  • (?m)^ - 行首
  • (black\n{\n.*\n\s*value\s+) - 第 1 组:
    • black - black
    • \n{\n - 换行,{,换行
    • .* - 整行
    • \n\s* - 换行符,然后是 0+ 个空格
    • value - value 子串
    • \s+ - 1+ 个空格
  • \d+ - 1 个或多个数字。

替换 \g<1>30 由两部分组成:

  • \g<1> - 对第 1 组的明确反向引用
  • 30 - 30

请通过7.2.1. Regular Expression Syntax