我有一个相当广泛的autolisp文件(大约4000行),它将一个以逗号分隔的大项目编号列表及其描述写入文件。这是一个例子(除了数字和描述外,它们看起来都一样)
>(write-line (strcat "0203," (itoa 1-2x4x8) ", PCS 2x4x 92 5/8 STUD GRADE FIR" ) file)
“0203”是项目编号,“2x4x 92 5/8 STUD GRADE FIR”是描述,不介意逗号或PCS(代表“件”),它们是无关紧要的。重要的是我需要更改该项目编号以匹配新列表。这是我相信正则表达式可能会有所帮助,但我很难找到。
基本上,我需要在文件中搜索描述(如上例所示),并用新数字替换4位数字。常规或扩展表达式可以做到吗? (或者其他可能的东西)并且要清楚
这个数字总是4位数,完全如图所示,描述只会在文件中出现一次(它们是精确的),描述和我需要替换的相关数字将始终在同一行。< / p>
请帮助:)
答案 0 :(得分:0)
不确定正则表达式会对此有所帮助。如果您搜索具有重复模式的行并且可选地替换具有固定文本的模式或与该行上的另一个模式匹配的值,则正则表达式是最有用的。
在我对您所描述的内容的理解中,您正在寻找每行不同的固定文本,并希望用与搜索文本一对一的数字替换该行的一部分。这是一个完全不同的用例,您需要迭代每个搜索文本,并有另一个表链接搜索文本和新数字。
在我看来,你需要为每个搜索文本创建一个正则表达式,并为旧到新的数字创建一个替换模式(在vi-type命令中):
s!\d+,(.*2x4x 92 5/8 STUD GRADE FIR)!1234,\2!
这匹配4位数字和逗号,后跟填充内容和搜索文本。替换用“新”数字,逗号和匹配的捕获组替换整个事物。 但是创建这些正则表达式行本质上更多的工作,然后在文件中手动替换...