用列表替换多个单词 - 重复创建
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
有替换列表(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