
本文介绍如何利用 Python 的正则表达式(regex)精准定位并移除嵌套括号中最内层括号内相邻字母数字字符之间的空格,从而实现类似 "(1 2 3)" → "(123)" 的格式化效果,避免误删外层空格或破坏括号结构。
本文介绍如何利用 python 的正则表达式(regex)精准定位并移除嵌套括号中最内层括号内相邻字母数字字符之间的空格,从而实现类似 `"(1 2 3)" → "(123)"` 的格式化效果,避免误删外层空格或破坏括号结构。
在处理类 Lisp 或自定义 DSL 的嵌套括号结构(如 ; (Col1 Col2 (Col3 Col4 Col5) ))时,常需对最内层括号内的空格进行清洗——例如将 (1 2 3) 转为 (123),但不能影响外层结构(如 Col1 和 Col2 之间的空格应保留,除非明确要求全局处理)。直接使用贪婪匹配(如 \(.+\(([^()]*)\)\))虽能捕获内层内容,却无法精准定位“仅位于两个字母/数字之间的空格”。
推荐采用 “上下文感知替换”策略:结合正向先行断言((?=\w))和反向先行断言((?
import re text = "; (113 (1 2 3) )" # 匹配:前面是字母/数字,后面也是字母/数字的空格 pattern = r"(?<p>⚠️ 注意事项: </p><div class="aritcle_card flexRow artxards"> <div class="artcardd flexRow"> <a class="aritcle_card_img" rel="nofollow" href="/xiazai/skill11254" title="Python Dependency Candidate Fetcher 2"><img src="https://img.php.cn/upload/skill/001/246/273/6adaf20d79f23518.jpg" alt="Python Dependency Candidate Fetcher 2" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a> <div class="aritcle_card_info flexColumn"> <a rel="nofollow" href="/xiazai/skill11254" title="Python Dependency Candidate Fetcher 2" class="overflowclass">Python Dependency Candidate Fetcher 2</a> <p class="overflowclass">根据包的能力以及 Jupyter 环境中的导入语句,从候选列表中挑选最适合用户表格工作流的 Python 包。</p> </div> <a rel="nofollow" href="/xiazai/skill11254" title="Python Dependency Candidate Fetcher 2" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a> </div> </div>
- 此模式会全局生效,若输入为 ; (Col1 Col2 (Col3 Col4 Col5) ),Col1 Col2 间的空格也会被移除(变为 Col1Col2)。如需仅作用于最内层括号,应先提取最内层子串再处理:
def remove_inner_spaces(s):
# 递归查找最内层括号(无嵌套的括号)
inner_pattern = r"\([^()]*\)"
# 替换最内层括号中的空格
def replace_func(match):
content = match.group(0)
cleaned = re.sub(r"(?<p>✅ 总结: </p>
- 单层需求 → 直接用 r"(?
- 多层嵌套且需精确作用域 → 先用 \([^()]*\) 提取最内层括号,再局部应用空格清理;
- 避免使用 .* 等贪婪匹配直接操作整个嵌套结构,易引发边界错误或过度替换。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










