删除括号及内容需据嵌套情况选择方法:无嵌套用\([^()]*\)等简单正则;单层嵌套可用重复量词;任意深度嵌套须用递归正则(如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))))),必须借助支持递归的正则引擎或编写循环/栈逻辑。
\((?:[^()]|(?R))*\)((?R) 表示递归整个模式)regex 模块(非内置 re):r'\((?:[^()]|(?R))*\)',并启用 regex.RECURSIVE
( 加一,) 减一,为 0 时截取完整段落再移除删除前先确认括号类型和是否嵌套;测试时用带高亮的正则工具(如 regex101.com)验证匹配范围;避免过度贪婪(如 .*)导致跨括号误删;中文括号(【】、〔〕、())需单独转义或加入字符集,例如:([^()]*)。