2016-03-11 55 views
1

替换文本,我有以下的文字(以VHDL模块实例化)多次与XXX,YYY和ZZZ为固定的话:留下特定的词

my_inst: XXX 
port map ( 
    YYY => my_o, 
    ZZZ => my_i 
); 

我想找到所有实例XXX块并替换如下。

XXX -> BUFF 
YYY -> b_o 
ZZZ -> b_i 

其余文字应该保持不变。

同样重要的是,只有当XXX模块被实例化时,YYY才被替换为b_o,而在其他情况下不会。

谢谢! 莎莎

回答

0

试试这个:

(?<key1>\w+):\s*(?<x>XXX)\n*\s*(?<key2>[^(]+?)\s*\(\s*\n*(?=.*?(?<y>YYY)\s=>)(?=.*?(?<z>ZZZ)\s=>)(?:[^(]+)\n*\) 

Demo

输出:

MATCH 1 
key1 [0-8] `my_inst1` 
x [10-13] `XXX` 
key2 [15-23] `port map` 
y [29-32] `YYY` 
z [44-47] `ZZZ` 
+0

很好,谢谢!我改变了一点,只存储了我感兴趣的三个: :\ s *(? XXX)\ n * \ s * port \ s * \ n * map \ s * \ n * \(\ s * \ n *(?=。*?(? YYY)\ s =>)(?=。*?(? ZZZ)\ s =>)(?:[^(] +)\ n * \) 如何将它应用到文件中,以便每次一起发生时全部替换它们? –