2017-03-04 7 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) 

例えば、いくつかの正規表現とそれらの置き換えとdictの一種?モジュールの関数を何度も何度も呼び出してパフォーマンスに影響を与える方法についても興味がありますか?

+1

'dict'のための必要はありませんが、2-'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 
関連する問題