文本文件如下:
<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>'
我认为我的问题是如何匹配多行包含空格或制表符的行。感谢大家。
答案 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)