我有一个Verilog文件,其中一些输入和输出被命名为133GAT(123)。例如
nand2 g679(.a(n752), .b(n750), .O(1355GAT(558) ));
在这里,我仅需将1355GAT(558)
替换为1355GAT_588
而不是.a(n752)
。有多个这样的实例。
我尝试使用python3。
re.sub(r'GAT*\((\w+)\)',r'_\1',"nand2 g679(.a(n752), .b(n750), .O(1355GAT(558) ) ")
它的输出为
'nand2 g679(.a(n752), .b(n750), .O(1355_558 ) '
我希望得到的输出为
'nand2 g679(.a(n752), .b(n750), .O(1355GAT_558 ) '
答案 0 :(得分:0)
您的正则表达式GAT*\((\w+)\)
匹配GA
,GAT
,GATT
等,尽管它与字符串中的GAT
匹配,但您实际上正在替换替换它,因为您从不捕获它,而再次将其包含在替换中。
此方法有效,您可以选择检查GAT
之前的数字。
# regex
(\d+GAT)\((\d+)\)
# replacement
\1_\2
import re
s = "nand2 g679(.a(n752), .b(n750), .O(1355GAT(558) ));"
r = r'(\d+GAT)\((\d+)\)'
x = re.sub(r,r'\1_\2',s)
print(x)
这也可以,但是使用一个捕获组而不是两个。
# regex
(?<=\dGAT)\((\d+)\)
# replacement
_\1
import re
s = "nand2 g679(.a(n752), .b(n750), .O(1355GAT(558) ));"
r = r'(?<=\dGAT)\((\d+)\)'
x = re.sub(r,r'_\1',s)
print(x)