我想在数千个 wavefront *.mtl 文件中搜索替换和字符串以添加许多新的纹理链接。使用 Notepad++ 正则表达式可以做到这一点吗?我已经经常使用正则表达式修改这些文件,但这项任务超出了我的能力范围!
在当前状态下,每个文件中都有许多 Materialparts 如下所示:
newmtl 材质__28 纳秒 0.000000 ︙ 科威特第纳尔 1.000000 1.000000 1.000000 堪萨斯 0.000000 0.000000 0.000000 柯 0.000000 0.000000 0.000000 map_Kd 纹理\wall_exterior_wood_02.png
其中的点代表我不想更改的文本(并且不包含字符串map_Kd
)。
之后它应该包含与第一个名称完全相同的 NRM 和 Spec PNG map_Kd
。
例子:
newmtl 材质__28 纳秒 0.000000 ︙ 科威特第纳尔 1.000000 1.000000 1.000000 堪萨斯 0.000000 0.000000 0.000000 柯 0.000000 0.000000 0.000000 map_Kd 纹理\wall_exterior_wood_02.png 地图凹凸纹理\wall_exterior_wood_02_nrm.png 地图凹凸纹理\wall_exterior_wood_02_nrm alternative.png map_Ks 纹理\wall_exterior_wood_02_spec.png
为了清晰起见,我在行中添加了空格map
。重要的是,PNG 的命名应该相同,除了前缀“ map_bump
”和“ map_ks
”以及后缀“ _nrm
”、“ _nrm alternative
”和“ _spec
”之外。
答案1
在 Notepad++ 中。
使用ctrl+ h(替换)
在左下角的搜索模式框中选择“正则表达式”单选按钮(确保匹配换行符复选框未勾选)
寻找:
map_Kd\s+(\S+)\.png
代替:
map_Kd \1.png\n map_bump \1_nrm.png\n map_bump \1_nrm_alternative.png\n mapKs \1_spec.png
find 表达式查找“map_Kd”,后跟一个或多个空格(“ \s+
”),然后保留一个或多个非空格字符(“ (\S+)
”),直到找到“ .png
”
替换会将您保留的字符串放在\1
出现“ ”的任何位置。我还添加了“ \n
”换行符和空格,以便像您的示例中那样对齐内容。