0

パイソン仲間にとっては簡単な答えだと思います。私は新人で、かなり長い間 (数時間) 答えを探していました...

最後の正規表現一致 (一致を含むおよび一致を除く) の後にすべての行を返す方法は? 私はpython 2.6で遊んでいます

データ:

string log 1 
string log 2
string match
string log 4
string match
string log 5
string log 6

想定されるケース 1:

string match
string log 5
string log 6

想定されるケース 2:

string log 5
string log 6

ここに投稿されたbashに対する同じ質問行番号の後にすべての行を取得する方法

sed ソリューション:

sed -n 'H; /string match/h; ${g;p;}'
sed -n 'H; /string match/h; ${g;p;}' | grep -v 'string match'
4

3 に答える 3

1

短いコードを検討している場合は、それでよいでしょうか。

ケース 1:

>>> import re
>>> input_data = open('path/file').read()
>>> result = re.search(r'.*(string match\s*.*)$', input_data, re.DOTALL)
>>> print(result.group(1))
string match
string log 5
string log 6

ケース 2:

>>> import re
>>> input_data = open('path/file').read()
>>> result = re.search(r'.*string match\s*(.*)$', input_data, re.DOTALL)
>>> print(result.group(1))
string log 5
string log 6

ただし、最後の「文字列一致」がファイル内ではるかに上にある場合、その正規表現には多くのバックトラックが発生することに注意してください。

于 2013-09-23T07:11:08.003 に答える
0
import sys

with open('/path/to/file', 'rb') as f:
    last_pos = pos = 0
    for line in f:
        pos += len(line)
        if 'string match' in line:
            last_pos = pos
    f.seek(last_pos)
    sys.stdout.writelines(f)

ループを使用して最後の一致位置を見つけました。次に、file.seekを使用してファイルの位置を移動しました。

于 2013-09-23T06:50:07.737 に答える