0

我有一个相当广泛的 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 位数字,完全如图所示,描述只会在文件中出现一次(它们是准确的),描述和我需要替换的相关数字将始终位于同一行。

请帮忙 :)

4

1 回答 1

0

不确定正则表达式是否会帮助您解决这个问题。如果您搜索具有重复模式的行并可选地用固定文本或与该行上的另一个模式匹配的值替换模式,则正则表达式最有用。

根据我对您所描述内容的理解,您正在寻找固定文本,每行都不同,并希望用与搜索文本一一对应的数字替换该行的一部分。这是一个完全不同的用例,您需要对每个搜索文本进行迭代,并拥有另一个链接搜索文本和新数字的表。

在我看来,您需要为每个搜索文本创建一个正则表达式,并为旧数字创建一个替换模式,例如(在 vi 类命令中):

s!\d+,(.*2x4x 92 5/8 STUD GRADE FIR)!1234,\2!

这匹配 4 位数字和逗号,后跟内容和您的搜索文本。替换用“新”数字、逗号和匹配的捕获组替换了整个内容。但是创建这些正则表达式行本质上是比在文件中手动替换更多的工作......

于 2011-03-09T20:50:58.050 回答