我在这个网站上搜索了我的问题的答案。有回答的问题,如:
但是我无法将信息转换为我的问题,所以:
我需要替换文本文件中的特定值。文件结构如下所示:
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)
但这不起作用。我理解如何替换单个字符串,但我不知道如何替换文件中特定位置的特定值。
答案 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
值