Python 正则表达式替换(多行,仅部分)
Python regex substitution (multiline, only partial)
我在此站点上搜索了我的问题的答案。已回答如下问题:
- Multiline regex replacement
- matching a multiline block of text
但我无法将信息转化为我的问题,所以:
我需要替换文本文件中的特定值。文件结构如下所示:
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+
详情
(?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
值
我在此站点上搜索了我的问题的答案。已回答如下问题:
- Multiline regex replacement
- matching a multiline block of text
但我无法将信息转化为我的问题,所以:
我需要替换文本文件中的特定值。文件结构如下所示:
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+
详情
(?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
值