python返回最后一个regex匹配后的所有行

2024-06-07 23:18:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我打赌这对Python同伴来说是个简单的答案。 我是个菜鸟,我已经找了好一阵子了(几个小时)。。。在

如何返回最后一个正则表达式匹配(包括和排除匹配)之后的所有行? 我在玩python2.6

数据:

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

预期情况1:

^{pr2}$

预期案例2:

string log 5
string log 6

bash what在这里发布了相同的问题How to get all lines after a line number

sed解决方案:

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

Tags: 数据答案bashlogstringmatch情况what
3条回答
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移动文件位置。在

t = '''string log 1 
string log 2
string match
string log 4
string match
string log 5
string log 6'''

me = t.rsplit('string match',1)[1].lstrip()

e = t[t.rfind('string match'):]

print '%s\n\n%r\n\n%r' % (t,me,e)

结果

^{pr2}$

如果你在研究一段较短的代码,也许是这样?在

案例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:

^{pr2}$

但是警告,如果文件中的最后一个“字符串匹配”太高了,那么正则表达式中会有一批回溯。在

相关问题 更多 >

    热门问题