regex 删除Python中特定行之后的所有行

kadbb459  于 2023-06-25  发布在  Python
关注(0)|答案(3)|浏览(142)

如何删除文本文件中特定行之后的所有行?
例如,我想更改文件:
这是重要的一号线。
这是重要的第二行。
这里开始扔掉线。
这里是扔掉线一。
这是扔掉线2。
对此:
这是重要的一号线。
这是重要的第二行。
我想我会想regex匹配r '这里开始(。|\n)*'来匹配文件中'Here begins the '之后的所有内容,但我迷路了。
我试过这个,但它不工作:

import re  
with open ("file1.txt", "r", encoding="utf-8") as f:  
    lines = f.readlines()

found_line = re.search(r'^Here begins the(.|\n)*',lines)  
lines = lines[:found_line.start()]  
with open ("file1.txt", "w", encoding="utf-8") as f:  
    f.writelines(lines)

谢谢你。

ozxc1zmp

ozxc1zmp1#

你可以读取这个文件,用re.sub()应用你提到的正则表达式,然后像这样写入这个文件:

import re
with open("file.txt", "r") as f:
    data = f.read()
    
subbed_data = re.sub(r'Here begins the throw away lines.(.|\n)*', "", data)

with open("file.txt", "w") as f:
    f.writelines(subbed_data)

输出:

This is important line one.
This is important line two.
ckx4rj1h

ckx4rj1h2#

您可以逐行读取文件,并在该行与正则表达式匹配时中断循环。

import re

lines = []
with open ("file1.txt", "r", encoding="utf-8") as f:  
    for line in f:
        if re.search(r'^Here begins the(.|\n)*', line):
            break
        lines.append(line)

with open ("file1.txt", "w", encoding="utf-8") as f:  
    f.writelines(lines)

顺便说一下,你可以用line.startswith("Here begins the")替换re.search(r'^Here begins the(.|\n)*', line),并删除re库,因为你只是检查字符串的开头,看看该行是否符合你的标准。

nfg76nw0

nfg76nw03#

如果你想在多行中使用^,你必须使用re.MULTILINE或简称re.M
这种模式(.|\n)*是一种非常低效的构造。您可以使用.*并使用re.S标志来对换行符进行点匹配。
然后使用re.sub将整个匹配替换为空字符串。

import re

with open("file.txt", "r", encoding="utf-8") as inp:
    allLines = inp.read()

    with open("file.txt", "w", encoding="utf-8") as outp:
        outp.writelines(re.sub(r'^Here begins the.*', "", allLines, 0, re.M | re.S))

或者使用内联修饰符的模式:

outp.writelines(re.sub(r'(?ms)^Here begins the.*', "", allLines))

相关问题