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

Python 如何删除字符串中所有以proof{开头、以}结尾的子串

问题原因

你原来的正则写法存在三个核心问题,导致无法得到预期结果:

  • 使用re.search只会提取第一个匹配到的片段,无法批量替换所有目标proof块,也不会保留块外的其他正常内容
  • 默认的.*是贪婪匹配模式,会尽可能匹配最长的内容,直接跨多个proof块匹配到字符串最后一个},吞掉中间的正常文本
  • 正则默认模式下.无法匹配换行符,根本识别不了跨多行的proof块内容
正确实现代码

直接用re.sub做全局非贪婪替换,开启跨行匹配模式即可:

import re

# 直接使用你已经定义好的原始字符串s即可
pattern = r'proof\{.*?\}'
result = re.sub(pattern, '', s, flags=re.DOTALL)

# 打印即可得到预期输出
print(result)
代码说明
  • 正则里的.*?是非贪婪匹配,遇到最近的一个}就会停止匹配,不会跨proof块吞掉无关内容;且你给出的proof块内部仅包含()、[]符号,不存在多余的},不会出现提前截断的问题
  • flags=re.DOTALL参数让.可以匹配包括换行符在内的所有字符,完美适配跨多行的proof内容块
  • re.sub会自动扫描整个字符串,把所有匹配到的proof{...}块替换为空字符串,替换后原块位置的逗号会自动保留,和你给出的期望输出完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 03:06:10