0

番号付きの行のみを印刷するように最善を尽くしています。私は一般的に正規表現にまだ慣れていないため、コードは部分的にしか完成していないため、正しい方法や構文を使用していない可能性があります。個々の re.matches は正常に機能します。それらを組み合わせると、望ましくない結果が得られます。

サンプル文字列:

file = '''
title|Head1|Head2|Head3|head4 
----|------|-----|-----|
1|1150976|0|25300992|bfa92720/bfa924f8|su|(None, None)
2|1150976|0|25300992|bfa92720/bfa924f8|su|(None, None)
3|1150976|0|25300992|bfa92720/bfa924f8|su|(None, None)
4|1150976|0|25300992|bfa92720/bfa924f8|su|(None, None)
5|1150976|0|25300992|bfa92720/bfa924f8|su|(None, None)
All|processes:|MemAlloc|=|408125440|(None, None)|0.0.0.0
|(None, None)
0.0.0.0 ,text
''' 
import re
for line in file:
    pat= re.match('(^[A-Z][a-z])|(^--.+)',line) # or use re.match('^[0-9]',line) and match pat != None
    patIP = re.match ('^{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}',line)#
    if patIP == None  or pat == None:
        print(line)

番号付きの行だけを印刷するロジックに固執しています..おそらく完全にオフです..0.0.0.0(IPアドレス)行を印刷したくないことに注意してください。

望ましい出力:

1|1150976|0|25300992|bfa92720/bfa924f8|su|(None, None)
2|1150976|0|25300992|bfa92720/bfa924f8|su|(None, None)
3|1150976|0|25300992|bfa92720/bfa924f8|su|(None, None)
4|1150976|0|25300992|bfa92720/bfa924f8|su|(None, None)
5|1150976|0|25300992|bfa92720/bfa924f8|su|(None, None)
4

2 に答える 2

0

これを試すことができます:

import re

file = '''
title|Head1|Head2|Head3|head4 
----|------|-----|-----|
1|1150976|0|25300992|bfa92720/bfa924f8|su|(None, None)
2|1150976|0|25300992|bfa92720/bfa924f8|su|(None, None)
3|1150976|0|25300992|bfa92720/bfa924f8|su|(None, None)
4|1150976|0|25300992|bfa92720/bfa924f8|su|(None, None)
5|1150976|0|25300992|bfa92720/bfa924f8|su|(None, None)
All|processes:|MemAlloc|=|408125440|(None, None)|10.93.103.73|(None, None)
0.0.0.0 ,text
''' 

matches = re.findall(r'^\d+\|.*$', file, re.MULTILINE)
for match in matches:
    print match

複数行モードを使用し、行頭^行末を表す$場合

于 2013-06-20T17:00:00.313 に答える