2017-10-05 62 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];