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

正则表达式按|分割:排除括号内|字符的需求求助

解决按括号外的|分割字符串的问题

我来帮你搞定这个需求!要实现仅分割括号外的|,我们需要区分竖线是否处于括号(包括可能的嵌套括号)内部,下面分几种情况给出解决方案:

一、无嵌套括号的简单场景

如果你的字符串里没有嵌套括号(比如a|b(c|d)|e这种),可以直接用一个带负向预查的正则表达式:

正则表达式

\|(?![^(]*\))

解释

  • \|:匹配目标分隔符|(需要转义,因为它在正则里是特殊字符)
  • (?![^(]*\)):负向预查,确保当前竖线后面不会出现"任意非左括号的字符 + 右括号",也就是说这个竖线不在一对括号内部。

Python示例代码

import re

input_str = "apple|banana(orange|pear)|grape"
split_result = re.split(r'\|(?![^(]*\))', input_str)
print(split_result)
# 输出: ['apple', 'banana(orange|pear)', 'grape']

二、处理嵌套括号的复杂场景

如果字符串里有嵌套括号(比如a|b(c|d(e|f))|g),上面的简单正则就失效了,因为它无法识别嵌套的括号层级。这里有两种解决方案:

方案1:使用支持递归正则的第三方库

Python标准库的re模块不支持递归正则,但可以用第三方库regex(专门增强的正则库),它支持平衡组和递归匹配。

正则表达式

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

解释

  • (?R):递归引用整个正则表达式,这样可以匹配嵌套的括号结构
  • 整体逻辑:确保当前竖线后面的所有括号都是成对闭合的,不会把内部的竖线当成分隔符

代码示例

首先需要安装库:

pip install regex

然后使用:

import regex

input_str = "a|b(c|d(e|f))|g"
split_result = regex.split(r'\|(?![^()]*(?:\((?R)\)[^()]*)*\))', input_str)
print(split_result)
# 输出: ['a', 'b(c|d(e|f))', 'g']

方案2:手动遍历字符串(不依赖第三方库)

如果不想额外安装库,可以手动遍历字符串,跟踪括号的深度,只有当括号深度为0时才分割:

Python示例代码

def split_outside_brackets(text, delimiter='|'):
    parts = []
    current_part = []
    bracket_depth = 0
    
    for char in text:
        if char == '(':
            bracket_depth += 1
            current_part.append(char)
        elif char == ')':
            if bracket_depth > 0:
                bracket_depth -= 1
            current_part.append(char)
        elif char == delimiter and bracket_depth == 0:
            # 只有括号深度为0时才分割
            parts.append(''.join(current_part))
            current_part = []
        else:
            current_part.append(char)
    
    # 把最后一部分加入结果
    if current_part:
        parts.append(''.join(current_part))
    
    return parts

input_str = "a|b(c|d(e|f))|g"
print(split_outside_brackets(input_str))
# 输出: ['a', 'b(c|d(e|f))', 'g']

总结

  • 无嵌套括号:用简单的负向预查正则即可,轻量高效
  • 有嵌套括号:优先考虑手动遍历(无依赖),或者使用regex库的递归正则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:12:59