Замените парантез на "_", оставив все содержимое как есть - PullRequest
0 голосов
/ 07 ноября 2019

У меня есть файл 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 ) '

1 Ответ

0 голосов
/ 07 ноября 2019

Почему ваш код не дает ожидаемых результатов

Ваше регулярное выражение GAT*\((\w+)\) соответствует GA, GAT, GATT и т. Д., И хотя оно соответствует GAT в вашей строке,вы фактически заменяете его своей заменой, так как вы никогда не захватываете его и не включаете его снова в замену.


Regex 1

Это работает и дает вам возможность проверять цифрыдо GAT.

См. это регулярное выражение в использовании здесь

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

# replacement
\1_\2

Код 1

См. код в использовании здесь

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 2

Это тоже работает, но использует одну группу захвата, а не две.

Смотрите это регулярное выражение здесь

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

# replacement
_\1

Код 2

См. Используемый код здесь

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...