为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

潇潇雨雨 2021-04-01 21:09:03
我有一个文本文件,其中包含### 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 redef 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()
查看完整描述

3 回答

?
守候你守候我

TA贡献1802条经验 获得超10个赞

经过一些基本的重构,结果如下...


import re

valid_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()。


查看完整回答
反对 回复 2021-04-09
  • 3 回答
  • 0 关注
  • 142 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信