2017-10-05 63 views
1

我嗨“想找更改以下模式的文件里面里面: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) 

回答

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