Python删除文本行#1的行直到正则表达式

时间:2015-04-05 00:28:47

标签: python regex

我有一个问题,我似乎无法在python中找到解决方案。

从命令行我可以通过以下方式执行此操作: sed' 1,/ COMMANDS / d'的/ var / TMP / NEWFILE

删除第1行到正则表达式#34; COMMANDS"的所有内容。简单

但是我不能用我能找到的Python做同样的事情 re.sub和multiline似乎不起作用。

所以我有一个问题,我怎么能以pythonic的方式做到这一点?我真的宁愿不在python中运行sed,除非我必须这样做。

3 个答案:

答案 0 :(得分:3)

我会使用fileinputinplace=True实际更改原始文件设置标记,当您找到匹配并删除行时,直到您执行此操作:

import fileinput
import re
found = False
for line in fileinput.input("your_file",inplace=True):
    if re.match("pattern",line):
        found = True
    if found:
        print(line,end="") # print line, python2
    else:
        print(end="") # print, python2

如果模式if "pattern" in line没有太复杂,也可能有效。

答案 1 :(得分:0)

设置标志为false。

迭代每一行。 对于每一行,
1)当您匹配您的图案时,请设置一个标志 2)如果当前设置了标志,则打印该行。

答案 2 :(得分:0)

又快又脏:

import re

regex = re.compile('(^|\n)(pattern)(\n|$)')

with open('file.txt') as f:
    entire_file = f.read()

with open('file.txt', 'w') as f:
    print(regex.split(entire_file)[0], end='', file=f)

虽然除非必须(例如,如果您的模式跨越多行),否则在整个文件上运行正则表达式可能不是一个好主意。