有替换列表(http://pastebin.com/JH932Qxi) 和列表必须替换(http://pastebin.com/RSwdWiKy)。 更换规则:
S1000005 = S1000005,S1000006,S1000010
S1000007 = S1000007,S1000008
S1000009 = S1000009
S2000005 = S2000005,S2000006,S2000007,S2000008
S2000009 = S2000009,S2000010
S3000005 = S3000005,S3000010
S3000006 = S3000006,S3000008
S3000007 = S3000007,S3000009
输入行:
S1000005 S2000005 S3000005
S1000006 S2000006 S3000006
S1000007 S2000007 S3000007
S1000008 S2000008 S3000008
S1000009 S2000009 S3000009
S1000010 S2000010 S3000010
结果应该是这样的http://pastebin.com/8BkRFC87。
示例输出:
S1000005 S2000005 S3000005
S1000005 S2000005 S3000006
S1000007 S2000005 S3000007
S1000007 S2000005 S3000006
S1000009 S2000009 S3000007
S1000005 S2000009 S3000005
我使用记事本++完成了这项工作(它节省了很多时间),但可以完全自动化。 (首先,我将分割为线条,而不是使用书签线替换,而不是将3列重新制作。)
如何阅读替换列表以创建替换自由裁量权?以及如何使用字典通过替换来制作重复列表?
或者是否有任何文本编辑器可以进行搜索" S1000005,S1000006,S1000010,S1000011,S1000022,S1000023,S1000024,S1000025,S1000056"并用" S1000005"?
替换每一个答案 0 :(得分:1)
从第一个文件中获取要替换的词典{substitute}:
replace = {}
with open('input1') as fd:
for line in fd:
head, tail = line.split('=')
for idt in tail.split(','):
replace[idt] = head
在output
中写入第二个文件input2
的内容,并替换为:
with open('input2') as ifd, open('output', 'w') as ofd:
for line in ifd:
ofd.write(' '.join(replace.get(idt, idt) for idt in line.split()))
此处,dict.get方法用于取代标识符,如果标识符不存在于字典中,则用于标识符本身。
在vim文本编辑器中,S1000005,S1000006,S1000010,S1000011,S1000022,S1000023,S1000024,S1000025,S1000056
替换S1000005
的正则表达式为:
%s/S1000005\|S1000006\|S1000010\|S1000011\|S1000022\|S1000023\|S1000024\|S1000025\|S1000056/S1000005/g
在其他文字编辑器下,某些角色可能需要转义\
。取决于使用的正则表达式引擎。
其他正则表达式引擎可以接受这个:
s/{S1000005,S1000006,S1000010,S1000011,S1000022,S1000023,S1000024,S1000025,S1000056}/S1000005/g