用列表替换多个单词 - 重复创建

Multiple word replacement by list - duplicates creation

有替换列表(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

我是用notepad++做的(节省了很多时间),但是完全自动化是可以的。 (起初我分割成行,而不是使用书签行替换和返回 3 列)。

如何阅读替换列表来创建替换自由裁量权?以及如何使用字典通过替换来制作重复列表?

或者是否有任何文本编辑器可以搜索 "S1000005,S1000006,S1000010,S1000011,S1000022,S1000023,S1000024,S1000025,S1000056" 并将每个替换为 "S1000005"?

从第一个文件中获取字典{被替换: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 替换 S1000005,S1000006,S1000010,S1000011,S1000022,S1000023,S1000024,S1000025,S1000056 的正则表达式是:

%s/S1000005\|S1000006\|S1000010\|S1000011\|S1000022\|S1000023\|S1000024\|S1000025\|S1000056/S1000005/g

在其他文本编辑器中,某些字符可能需要转义 \。取决于使用的正则表达式引擎。 其他正则表达式引擎可以接受这个:

s/{S1000005,S1000006,S1000010,S1000011,S1000022,S1000023,S1000024,S1000025,S1000056}/S1000005/g