1

私はそのようなブロックの繰り返されるユニットに他ならない巨大なファイルを持っています:

//WAYNE ROONEY (wr10)
  90 [label="90"];
  90 -> 11 [weight=25];
  90 -> 21 [weight=23];
  90 -> 31 [weight=17];
  90 -> 41 [weight=12];
  90 -> 51 [weight=1];
  90 -> 62 [weight=50];
  90 -> 72 [weight=7];
  90 -> 82 [weight=27];
  90 -> 92 [weight=9];
  90 -> 102 [weight=43];

このような形式に変換する必要があります

90 11 25

つまり、余分なものをすべて削除し、番号をそのまま維持する必要があります。

このコード行で正規表現を使用してみました:

for line in filein:
    match = re.search('label=" "', line)
    if match:
        print (match.group())

'label'ただし、ファイル内ののすべてのインスタンスを出力するだけです。を検索しようとすると'label=" "'、出力がありません。ラベルをどのように読み取ることができれば、重みの読み取りはそれにかなり似ています。

4

3 に答える 3

4

これはどう:

import re

file = open("file","r")                       

for line in file:                                 
    if re.search('->',line):
        print ' '.join(re.findall('[0-9]+',line))

出力:

90 11 25
90 21 23
90 31 17
90 41 12
90 51 1
90 62 50
90 72 7
90 82 27
90 92 9
90 102 43

出力を保存するには、リダイレクトするだけです。python test.py > newfile

于 2012-12-01T21:44:14.960 に答える
2

すべての行を次のようなものと一致させることができます。

  1. (\d+)->数値(後方参照)
  2. \s*->\s*->スペース->スペース
  3. (\d+)->別の番号(後方参照)
  4. \s*\[weight=\"->スペースと文字通り[weigth= "
  5. (\d+)->別の番号(後方参照)
  6. \];->文字通り]; 試合を終了します。

次に、次のような番号付きの後方参照があります。

  1. 最初の番号
  2. 2番目の番号
  3. 3番目の番号

これで、必要なパターンで文字列を作成できます。($ 1 $ 2 $ 3)

于 2012-12-01T21:44:18.830 に答える
1

各行からすべての数値を取得するには、次r'\d+'と一緒に使用し.findall()ます。

for line in filein:
    if 'label' in line:
        print 'label:',
    print ' '.join(re.findall(r'\d', line))

線で何をしたいのかは完全には明確ではありませんlabelが、非常に単純なループが出力されます。

label: 90 90
90 11 25
90 21 23
90 31 17

于 2012-12-01T21:44:07.643 に答える