You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何使用正则匹配指定字段并删除对应花括号块内容

正则删除文本指定花括号块实现方案

问题背景

需要编写正则代码匹配文本文件中的指定模式,定位到目标内容后将其从原文本中移除,已完成文件读取的基础代码编写:

# Reading the file data and store it 
with open('file.txt','r+') as f:
    file = f.read()
print(file)

读取到的原始文本内容如下:

'{\n\tINFO\tDATA_NUMBER\t974\n\t{\n\t\tDAT_CQFD\n\t\t{\n\t\t\tsome random text \t787878\n\t\t}\n\t\tDATA_TO_MATCH\n\t\t{\n\t\t1\tbunch of characters \t985\n\t\t2\tbunch of data\t\t78\n\t\t}\n\t}\n\tINFO\tDATA_CATCHME\t123\n\t{\n\t\t3\tbunch of characters \n\t\t2\tbunch of datas\n\t}\n\tINFO\tDATA_INTACT\t\t456\n\t{\n\t\t3\tbunch of numbers \n\t\t2\tbunch of texts\n\t}\n\n'

具体需求

  • 搜索匹配DATA_TO_MATCH字段,定位到其所属块的闭合花括号},删除从该字段起始到对应闭合花括号(含花括号本身)的所有内容
  • 对DATA_CATCHME字段执行完全相同的删除操作
    处理完成后的预期文本结果:
'{\n\tINFO\tDATA_NUMBER\t974\n\t{\n\t\tDATA_CQFD\n\t\t{\n\t\t\tsome random text \t787878\n\t\t}\n\n\t}\n\tINFO\tDATA_INTACT\t\t456\n\t{\n\t\t3\tbunch of numbers \n\t\t2\tbunch of texts\n\t}\n\n}\n'

已尝试的代码

目前已编写部分测试代码,但对正则语法和Python re模块使用不熟悉,无法写出符合要求的匹配模式,计划使用re.sub(my_patern,'', text)方法将匹配内容替换为空,实现删除效果:

import re
#find the DATA_TO_MATCH
re.findall(r".*DATA_TO_MATCH",file)  

#find the DATA_CATCHME
re.findall(r".*DATA_CATCHME",file)  

#supposed to find everything before the closed bracket "}"  
re.findall(r"(?=.*})[^}]*",file)  

实现代码

针对给出的文本结构(目标块无嵌套花括号),可以使用非贪婪匹配配合DOTALL标志实现需求,完整代码如下:

import re

# 读取文件内容
with open('file.txt','r+') as f:
    content = f.read()

# 正则模式说明:
# \s+ 匹配目标字段前的缩进、换行空白,避免删除后残留多余空行
# (DATA_TO_MATCH|DATA_CATCHME) 匹配两个需要删除的目标字段
# \s*\{ 匹配字段后到块起始左花括号的空白和左花括号本身
# .*? 非贪婪匹配任意内容,直到遇到第一个闭合花括号停止
# \} 匹配块的闭合右花括号
pattern = r'\s+(DATA_TO_MATCH|DATA_CATCHME)\s*\{.*?\}'

# 执行替换:flags=re.DOTALL 让.可以匹配换行符
cleaned_content = re.sub(pattern, '', content, flags=re.DOTALL)

# 验证输出结果
print(cleaned_content)

# 如需将处理后的内容写回文件,取消下方注释即可
# with open('file.txt', 'w') as f:
#     f.write(cleaned_content)

注意事项

  • 该方案仅适用于目标花括号块内部无嵌套花括号的场景,和给出的样例结构完全匹配;如果后续存在多层括号嵌套的情况,正则无法准确处理括号配对逻辑,需要使用对应格式的专用语法解析器
  • 非贪婪匹配符.*?会匹配到离目标字段最近的一个},不会误删后续其他块的内容
  • 模式开头的\s+会自动清理目标块前的多余缩进和空行,输出结果和预期格式完全一致

内容的提问来源于stack exchange,提问作者Art

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 06:24:24