搜索字符串并删除包含字符串和下面的行的行

我有一个文本文件,其中包含


### 174.10.150.10 on 2018-06-20 12:19:47.533613 ###

IP : 174.10.150.10 : 


IP : ALL :

我目前有使用Regex搜索日期/时间字符串的代码。如何删除包含找到的字符串的行?我要删除该行以及下面的行。


因此,这两行都将被删除:


### 174.10.150.10 on 2018-06-20 12:19:47.533613 ###

IP : 174.10.150.10 : 

我的代码当前仅将“ None”添加到文本文件的底部。


import re


def run():  

    try:

        with open('file.txt', 'r') as f:

            with open('file.txt', 'a') as f2:

                reg = re.compile('###\s+\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}.+(\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}.\d{0,})\s###')

                for line in f:

                    m = reg.match(line)

                answer = raw_input("Delete line? ")

                if answer == "y":


                    # delete line that contains "###" and line underneath

                    f2.write(str(m))


                else:

                    print("You chose no.")

    except OSError as e:

        print (e)


run()


潇潇雨雨
浏览 143回答 3
3回答

守候你守候我

经过一些基本的重构,结果如下...import revalid_lines = []def run():      try:        with open('file.txt', 'r') as f:            reg = re.compile('###\s+\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}.+(\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}.\d{0,})\s###\s?')            lines = f.readlines()            invalid_index = -10            for a in range(len(lines)):                reg_result = reg.match(lines[a])                if invalid_index == (a - 1):                    # Skip the line underneath the invalid line                    continue                if reg_result != None:                    # If the line matches the regexp.                    invalid_index = a                    answer = raw_input("Delete line? ")                    if answer.lower() != 'y':                        print("You chose no.")                        valid_lines.append(lines[a])                else:                    valid_lines.append(lines[a])        with open('file.txt', 'w') as f:            # Override the file...            f.writelines(valid_lines)    except OSError as e:        print (e)run()如果您要删除任何以###then开头的行,也许您应该将其视为regexp:###.*编辑:在您的正则表达式中,您应该\s?在末尾添加a以可选地匹配\n,因为文件包含换行符。另外,请使用fullmatch()代替match()。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python