【问题标题】:Python remove multiple linePython删除多行
【发布时间】:2021-01-20 04:35:02
【问题描述】:

我的文件有这样的内容

@email = "abc";

%area = (
    "abc" => 10,
    "xyz" => 10,
);

我可以使用任何正则表达式匹配以%area = ( 开头并阅读下一行直到找到);。这样我就可以从文件中删除这些行。

我尝试^%area = \(.*|\n\) 的正则表达式无法继续匹配下一行。

所以我的最终文件只有

@email = "abc";

【问题讨论】:

    标签: python regex file-io


    【解决方案1】:

    假设文件file 包含:

    @email = "abc";
    
    %area = (
        "abc" => 10,
        "xyz" => 10,
    );
    

    请您尝试以下方法:

    import re
    with open("file") as f:
        s = f.read()
        print(re.sub(r'^%area =.*?\);', '', s, flags=(re.DOTALL|re.MULTILINE)))
    

    输出:

    @email = "abc";
    
    
    

    如果您想清理剩余的空行,请尝试:

        print(re.sub(r'\n*^%area =.*?\);\n*', '\n', s, flags=(re.DOTALL|re.MULTILINE))
    

    那么结果是这样的:

    @email = "abc";
    
    • re.DOTALL 标志使. 匹配任何字符,包括换行符。
    • re.MULTILINE 标志允许^$ 分别匹配, 就在字符串中的换行符之后和之前。

    [编辑]

    如果要覆盖原文件,请尝试:

    import re
    with open("file") as f:
        s = f.read()
    with open("file", "w") as f:
        f.write(re.sub(r'\n*^%area =.*?\);\n*', '\n', s, flags=(re.DOTALL|re.MULTILINE)))
    

    【讨论】:

    • 是的,这可以删除这些行。有什么技巧可以用来覆盖文件吗?我应该打开r 然后w 还是可以使用append 模式?谢谢
    • 感谢您的反馈。要覆盖文件,请在读取原始文件后以“w”模式打开文件。 with 语句自动关闭打开的文件,我们可以安全地替换文件。我已经用修改后的脚本更新了我的答案。
    • 我尝试了您的解决方案,但在 linux 中出现错误提示 [Incomplete last line] 我可以知道这是什么问题吗?
    • 很抱歉,这个问题实际上是由另一行引起的。哈哈您的解决方案完美无缺。非常感谢!
    • 我发现我之前的代码过于贪婪地删除了周围的换行符。我现在已经修好了。很抱歉给您带来不便。
    【解决方案2】:

    要捕获和删除您的区域组,您可以使用; link

    re.sub('%area = \((.|\n)*\);', '', string)
    #'@email = "abc";\n\n'
    

    但是,这将在您的 @email 行之后包含两个新行。您也可以将 \n\n 添加到正则表达式以捕获它;

    re.sub('\n\n%area = \((.|\n)*\);', '', string)
    #'@email = "abc";'
    

    但是,如果电子邮件始终遵循相同的逻辑,您最好只搜索该行。 link

    re.search('(@email = ).*(?=\n)', string).group()
    #'@email = "abc";'
    

    【讨论】:

    • 感谢您的解决方案。但我还没有测试过。 @tshiono 提供的那个对我有用。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2016-06-14
    • 1970-01-01
    • 1970-01-01
    • 2017-12-03
    • 1970-01-01
    • 2018-12-20
    • 2015-04-21
    相关资源
    最近更新 更多