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

时间:2016-03-29 14:50:11

标签: python regex list replace tcl

有替换列表(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,S1​​000024,S1000025,S1000056"并用" S1000005"?

替换每一个

1 个答案:

答案 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