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

时间:2017-11-07 09:47:15

标签: python regex python-3.x multiline substitution

我在这个网站上搜索了我的问题的答案。有回答的问题,如:

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

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

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)

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

1 个答案:

答案 0 :(得分:0)

您可以使用

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+ - 一位或多位数。

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

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

请浏览7.2.1. Regular Expression Syntax