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

时间:2017-10-05 23:04:15

标签: 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。 我的正则表达式只寻找模式。* [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)

1 个答案:

答案 0 :(得分:0)

你可以试试这个:

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];