Python正则表达式转换fi中的特定模式

2024-04-19 10:42:22 发布

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

您好,我希望更改文件中的以下模式:

input [15:0] A;
output [15:0] B;
inout     [4:0]   C;
input [3:0]     D;
inout [0:32] X;
output [5:2] Y;

致:

input A [15:0];
output B [15:0];
inout C [4:0];
input D [3:0];
inout X [0:32];
output Y [5:2];

使用python正则表达式实现这一点的最佳方法是什么

这是我到目前为止写的,它确实起作用,但我认为我可以使它更有效。 1.它不会将多个空格转换为1。 2.我的正则表达式只查找模式。*[po]ut。什么是好的正则表达式,可以在任何行的开头捕获输入/输出/输入输出? 3.如何修改它以编辑给定目录路径内的所有文件

#!/usr/bin/python
import re

for line in fileinput.input(inplace=1):
    line = re.sub(r'^(.*[po]ut)(\s+\[\d+:\d+])(\s+[a-zA-Z0-9_]*);',r'\1\3\2;',line.rstrip())
    print(line)

Tags: 文件方法路径re目录编辑inputoutput
1条回答
网友
1楼 · 发布于 2024-04-19 10:42:22

您可以尝试以下方法:

s = ["input [15:0] A;", "output [15:0] B;", "inout     [4:0]   C;", "input [3:0]     D;", "inout [0:32] X;", "output [5:2] Y;"]
import re
final_data = [re.sub("(?<=\w)\s+(?=\[)", " {} ".format(re.findall("[A-Z](?=\;)", i)[0]), i[:-2]) for i in s]
new_final_data = [re.sub("\s+$", ';', i) for i in final_data]
for i in new_final_data:
   print(i)

输出:

input A [15:0];
output B [15:0];
inout C [4:0];
input D [3:0];
inout X [0:32];
output Y [5:2];

相关问题 更多 >