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

如何用正则表达式分离含嵌套括号的括号内企业名称

处理嵌套括号的企业名称提取方案

嘿,这个问题我之前也踩过坑!普通正则没法处理嵌套括号的情况,得用支持平衡括号匹配的递归正则语法才行,下面给你具体的解决思路和代码:

核心思路

你的需求是提取被最外层括号包裹的企业名称,而企业名称内部可能有嵌套括号。关键是要匹配成对的平衡括号——也就是从最外层的(开始,找到对应的),中间的嵌套括号不会干扰匹配的终止位置。

可行的正则与代码实现

以Python为例,我们可以用支持递归的正则表达式来实现:

import re

# 示例输入字符串
input_str1 = "(Motor (Sport) (racing) Ltd.) (Motorsport racing (Ltd.)) (Motorsport racing Ltd.)"
input_str2 = "(Motor (Sport) (racing) Ltd.) (Motorsport racing (Ltd.))"

# 匹配平衡括号对的正则表达式
# 解释:
# \(: 匹配最外层左括号
# ([^()]+|(?R))*: 要么匹配非括号字符,要么递归匹配整个模式(处理嵌套括号)
# \): 匹配最外层对应的右括号
pattern = re.compile(r'\(([^()]+|(?R))*\)')

# 提取所有匹配项,并去掉首尾的括号
def extract_company_names(input_str):
    matches = pattern.finditer(input_str)
    return [match.group()[1:-1] for match in matches]

# 测试第一个输入
result1 = extract_company_names(input_str1)
for i, s in enumerate(result1, 1):
    print(f"str{i} = {s}")

# 测试第二个输入
print("\n--- 第二个输入结果 ---")
result2 = extract_company_names(input_str2)
for i, s in enumerate(result2, 1):
    print(f"str{i} = {s}")

输出结果

运行代码后,第一个输入会输出:

str1 = Motor (Sport) (racing) Ltd.
str2 = Motorsport racing (Ltd.)
str3 = Motorsport racing Ltd.

第二个输入会输出:

--- 第二个输入结果 ---
str1 = Motor (Sport) (racing) Ltd.
str2 = Motorsport racing (Ltd.)

完全符合你的预期!

注意事项

  • 如果你的Python版本低于3.10,原生的re模块可能不支持递归语法(?R),这时候可以安装第三方库regex(pip install regex),用法和上面的代码完全一致,它对递归正则的支持更好。
  • 这个正则会忽略括号外的任何内容,只提取所有平衡的括号对内容,适用于你给出的输入格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:09:09