用"_"替换括号,保留所有内容不变

2024-09-30 18:25:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个verilog文件,其中一些输入和输出被命名为133GAT(123)

nand2 g679(.a(n752), .b(n750), .O(1355GAT(558) ));

在这里,我只需要用1355GAT_588替换1355GAT(558),而不是.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 ) '

Tags: 文件实例re命名verilogpython3gatnand2
1条回答
网友
1楼 · 发布于 2024-09-30 18:25:15

为什么你的代码没有给你预期的结果

您的正则表达式GAT*\((\w+)\)匹配GAGATGATT等,当它匹配字符串中的GAT时,您实际上是在用替换来替换它,因为您从未捕获它并在替换中再次包含它


正则表达式1

这是可行的,并为您提供了检查GAT之前的数字的选项

See this regex in use here

# regex
(\d+GAT)\((\d+)\)

# replacement
\1_\2

代码1

See code in use here

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)

正则表达式2

这也可以,但是使用一个而不是两个捕获组

See this regex in use here

# regex
(?<=\dGAT)\((\d+)\)

# replacement
_\1

代码2

See code in use here

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)

相关问题 更多 >