2011-09-09 153 views
2

我想用不同的值替换一系列管道字符,我如何用正则表达式来做到这一点?CSV搜索和替换

实施例:

This | is | a | sentence 
And | this | is | the | second | one 

最终结果:

This new is new2 a new3 sentence 
And new this new2 is new3 the new4 second new5 one 
+0

请重新表述您的问题增加大约所需更换的其他详细信息。 –

回答

2

如果替换值在端部只不同的号码,使用命令

:let n=[0] | %s/|/\='new'.map(n,'v:val+1')[0]/g 

(参见my answer问题“gVim find/replace with counter”为技术的 详细的描述。)

在替代的情况下值彼此基本不同,请将 命令替换为不是发生的序列号,而是 替换列表中的该号码作为索引。

:let n=[-1] | %s/|/\=['one','two','three'][map(n,'v:val+1')[0]]/g 

要在每行上相互独立地进行替换,使用 的:global命令来迭代上面的命令的一个通过线缓冲器的 。

:g/^/let n=[0] | s/|/\='new'.map(n,'v:val+1')[0]/g 

同样,

:g/^/let n=[-1] | s/|/\=['one','two','three'][map(n,'v:val+1')[0]]/g 
+0

非常好,谢谢。 – help

+0

多行代码如何?我想要在多行中进行相同的更改。添加%s^|/$ \ ...其余的替换命令,似乎不起作用。 示例 FROM: 此|是| a |句子 This |是|秒|句子 This |是|第三| |一句话 TO: 这个新的NEW2一个NEW3句子 这个新的NEW2第二句NEW3这 新是NEW2第三NEW3句 – help

+0

@help:这是很容易:只要使用':global'命令在迭代程序线。查看更新后的答案。 –

0

定义一个函数:

fun CountUp() 
    let ret = g:i 
    let g:i = g:i + 1 
    return ret 
endf 

现在,使用:

:let i = 1 | %s/|/\="new" . CountUp()/g 
+0

感谢您的提示。 – help