2017-03-04 109 views
2

我有一些文本文件是另一個軟件的輸出。我有一個Perl腳本通過膠帶粘在一起,它們連續清理了幾乎100個正則表達式。Python:連續多個正則表達式?

我是新來的Python和不知道是否有處理這種比這些大的塊,這是很多比的perl的結構更重更習慣的方法:string =~ s/blah/blah/i;

string = re.sub(r' +', " ", string, re.I) 
string = re.sub(r'(\w)- ', "\1, ", string, re.I) 
string = re.sub(r'u-s', "U.S.", string, re.I) 

比如有的正則表達式和替代的字典?我也很好奇連續多次調用模塊的函數會如何影響性能?

+1

無需一個'dict',但兩'tuple's的'list'纔有意義。 – ShadowRanger

+0

如何運行如此多的正則表達式而不會發生重疊? – sln

+0

源文件是一個提詞器腳本,因此許多用於提詞器軟件的獨特格式化代碼都將被刪除,以及頻繁出現的問題(例如,連字符被用來顯示暫停而不是逗號)。該文件正在轉換爲純文本供人類閱讀。 –

回答

2

如果將正則表達式放入元組中,那麼迭代元組並執行替換就很容易了。

正則表達式:

import re 
regexs = (
    (r' +', " ", re.I), 
    (r'(\w)- ', "\1, ", re.I), 
    (r'u-s', "U.S.", re.I), 
) 
compiled_regexs = [(re.compile(rx[0], rx[2]), rx[1]) for rx in regexs] 

代碼:

for line in lines: 
    for regex, replace in compiled_regexs: 
     line = regex.sub(replace, line) 
    print(line) 

測試數據:

lines = (
    'Quick Brown Fox', 
    'u-s lazy dog', 
) 

結果:

Quick Brown Fox 
U.S. lazy dog