删除括号及内容需据嵌套情况选择方法:无嵌套用\([^()]*\)等简单正则;单层嵌套可用重复量词;任意深度嵌套须用递归正则(如PCRE的(?R))或栈式编程逻辑。

要删除括号及其内部所有内容(包括括号本身),关键在于匹配成对的、可能嵌套或不嵌套的括号结构。但需注意:标准正则表达式(如 JavaScript、Python 的 re 模块)**不支持无限嵌套匹配**;若括号不嵌套,可用简单方案;若含嵌套(如 (a(b)c)),需用支持递归的引擎(如 PCRE、.NET、Python 的 regex 库)或改用其他方法。
基础场景:无嵌套括号(最常用)
适用于形如 abc(def)ghi、text [info] more (123) end 等——括号互不包含。
- 匹配任意一对英文小括号及其内容:
\([^()]*\) - 匹配方括号:
\[[^\[\]]*\] - 匹配花括号:
\{[^{}]*\} - 若需同时处理多种括号(不嵌套),可用分组+管道:
\([^()]*\)|\[[^\[\]]*\]|\{[^{}]*\} - 替换为空字符串即可删除
进阶需求:支持单层嵌套(有限深度)
例如 (a(b)c),最多一层嵌套。可用重复量词模拟,但可读性差、易出错,仅建议用于深度明确且固定的情况。
- 匹配最多两层嵌套的小括号:
\((?:[^()]|\([^()]*\))*\) - 说明:内层
\([^()]*\)匹配无嵌套子括号,外层(?:...)*允许多个非括号字符或该子模式 - 三层及以上嵌套会迅速变得复杂,不推荐纯正则硬解
真正嵌套括号:需递归正则或编程逻辑
当文本含任意深度嵌套(如 ((a)(b(c(d))))),必须借助支持递归的正则引擎或编写循环/栈逻辑。
- PCRE(PHP、R、部分命令行工具)可用:
\((?:[^()]|(?R))*\)((?R)表示递归整个模式) - Python 中使用
regex模块(非内置re):r'\((?:[^()]|(?R))*\)',并启用regex.RECURSIVE - 更通用稳妥的做法是写一个简短函数:逐字符扫描,用计数器跟踪括号层级,遇到
(加一,)减一,为 0 时截取完整段落再移除
实际使用提醒
删除前先确认括号类型和是否嵌套;测试时用带高亮的正则工具(如 regex101.com)验证匹配范围;避免过度贪婪(如 .*)导致跨括号误删;中文括号(【】、〔〕、())需单独转义或加入字符集,例如:([^()]*)。










