读取文件并匹配多行

时间:2018-11-22 20:26:35

标签: python regex

文本文件如下:

    <field>
        </field>

我想匹配块并在两个 field 标记之间写一些东西。我有以下来自How to search for a string in text files?

的代码
!/usr/bin/env python3
import mmap
import os

with open('sample.txt', 'rb+', 0) as file, \
     mmap.mmap(file.fileno(), 0, access=mmap.ACCESS_READ) as s:
    if s.find(b'<field>\n<\field>') != -1:
        file.write("Hello")

即使我使用 \ t 检测选项卡

,我的解决方案也无法正常工作
'<field>\n\t<\field>'

我认为我的问题是如何匹配多行包含空格或制表符的行。感谢大家。

2 个答案:

答案 0 :(得分:1)

请参考以下问题:Regular expression matching a multiline block of text

使用正则表达式,您的目标非常简单。以下脚本在变量<field>中找到html个标签,并将<text to put between the tags>放在标签之间。

import mmap
import os
import re

# do logic here

# test for what you want from variable s:

a = re.sub('<field>(.*\n*)<\/field>', '<text to put between the tags>', html)

答案 1 :(得分:0)

我从Pythonic way of inserting lines to a file

得到了答案

该解决方案不使用mmap。没错,我们不能将数据插入文件,但是可以替换数据。

        target = "<field>Hello</field>"

        with open(os.path.join(root, filename), 'r') as file:
            filedata = file.read()

        # Replace the target string
        filedata = filedata.replace('<field></field>', target)

        # Write the file out again
        with open(os.path.join(root, filename), 'w') as file:
            file.write(filedata)