我敢打赌,对于其他傻瓜来说,这是一个简单的答案。 我是一名新手,我一直在寻找一个答案(小时)...
如何在最后一次正则表达式匹配后返回所有行(包括和排除匹配)? 我正在玩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在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'
答案 0 :(得分: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
警告但是,如果最后一个'字符串匹配'在文件中上升,则该正则表达式中将存在批次回溯。
答案 1 :(得分: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移动文件位置。
答案 2 :(得分:0)
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)
结果
string log 1
string log 2
string match
string log 4
string match
string log 5
string log 6
'string log 5\nstring log 6'
'string match\nstring log 5\nstring log 6'