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

如何用Python正则匹配所有括号组外的文本?

处理嵌套括号:提取最外层括号内外的文本

嘿,这个问题绝对是正则处理嵌套结构的经典坑——普通的\(.*?\)或者\(.*\)根本搞不定嵌套括号,因为它们只会匹配到第一个闭合的右括号或者最后一个,完全没法识别层级!不过别担心,用递归正则就能完美解决,下面给你一步步拆解:

核心思路:用递归跟踪括号层级

要匹配嵌套的括号,我们需要让正则能够“记住”当前的括号层级——遇到左括号就深入一层,遇到右括号就退出一层,直到回到最外层的右括号。这种逻辑需要正则引擎支持递归(比如PCRE、Python的regex库、PHP、Java 9+等都支持,注意Python标准库的re模块不支持递归,得用第三方的regex)。

1. 提取最外层括号内的内容

用这个正则表达式就能精准匹配所有最外层的括号组:

\((((?:[^()]|(?R))*)\)

正则拆解:

  • \(:匹配最外层的左括号
  • ((?:[^()]|(?R))*):捕获组,用来提取括号内的内容(不含外层括号)
    • (?:...):非捕获组,用来分组但不产生额外捕获
    • [^()]:匹配任意非括号字符
    • (?R):递归整个正则表达式,用来处理嵌套的括号结构(比如里面的(Sui Generis (haha)))
  • \):匹配最外层的右括号

针对你的示例文本:

Application ( Change (Sui Generis (haha) ) cafe & laundrette) Monday to Thursday. (To match the sun)

用这个正则匹配后,会得到两个捕获结果:

  • " Change (Sui Generis (haha) ) cafe & laundrette"(可以用.strip()去掉前后空格)
  • "To match the sun"

2. 提取括号外的内容

要得到零级括号外的文本,只需要把所有最外层的括号组替换为空字符串,再清理掉多余的空格即可。用这个替换正则:

\((?:[^()]|(?R))*\)

替换为空后,你的示例文本会变成:"Application Monday to Thursday. ",再用.strip()去掉首尾空格,然后按多余空格分割(或者直接处理成你需要的两个部分),就能得到"Application"和"Monday to Thursday."。

示例代码(Python)

这里用Python的regex库来实现(因为标准库re不支持递归):

import regex

text = "Application ( Change (Sui Generis (haha) ) cafe & laundrette) Monday to Thursday. (To match the sun)"

# 提取所有最外层括号内的内容
inside_matches = regex.findall(r'\((((?:[^()]|(?R))*)\)', text)
inside_results = [match[0].strip() for match in inside_matches]

# 提取括号外的内容,清理多余空格
outside_text = regex.sub(r'\((?:[^()]|(?R))*\)', '', text).strip()
# 分割成你需要的两个部分(处理中间的多余空格)
outside_results = [part.strip() for part in outside_text.split('  ') if part]

print("括号内内容:", inside_results)
print("括号外内容:", outside_results)

运行结果:

括号内内容: ['Change (Sui Generis (haha) ) cafe & laundrette', 'To match the sun']
括号外内容: ['Application', 'Monday to Thursday.']

注意事项

  • 如果你的正则引擎不支持递归(比如JavaScript原生正则),可以用平衡组的模拟写法,或者用代码循环处理括号层级,不过相对麻烦一些。
  • 要确保括号是成对出现的,如果有未闭合的括号,正则可能会匹配到文本末尾。

内容的提问来源于stack exchange,提问作者Peter.k

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 03:53:01