0

次のようなデータファイルがあります。

group Head:
  data1:        abc         data2:            def
  2word data3:  ghi         data4:            jkl
  data3:        mno         three word data4: pqr stu

だからPythonで私はこのような正規表現を構築しました:

Data = re.findall(r'(([\w\(\)]+[ \t\f]?)+):([ \t\f]*(\S+))', data)

私のファイルは 600 行近くあり、多くの場合、上記のように 2 列あり、ファイルごとに解析に数分かかります。

ファイルごとに 10 秒未満で実行できるように、このコードをより効率的にするにはどうすればよいでしょうか?

4

4 に答える 4

2

繰り返し演算子をネストしており、指数バックトラッキングが発生している可能性があります。

代わりにこれを試してください:

r'(\S.+)\s*:\s*(\S+)'

非空白の後に何か他のものが続き、オプションの空白が前後にあるコロン、さらにいくつかの非空白が続きます。

于 2013-10-28T22:33:33.233 に答える
0

正規表現をプリコンパイルします。ドキュメント。

可能であれば、ファイルを分割し、行ごとに解析してください。

どちらも時間を短縮するのに役立ちます。

于 2013-10-28T22:27:54.577 に答える