You need to enable JavaScript to run this app. 如何按|分隔字符串且排除括号()内的|,正则匹配部分出错怎么解决?
优惠活动
大模型
产品
解决方案
定价
更多

如何按|分隔字符串且排除括号()内的|,正则匹配部分出错怎么解决?

按|拆分字符串且忽略括号内分隔符的实现方案

核心逻辑

匹配所有不在()包裹范围内的|作为分隔符,使用正向否定环视的正则实现,无需额外遍历逻辑,单层括号场景下直接可用。

可用正则表达式

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

该正则的匹配规则:仅匹配后面不存在「非左括号字符+右括号」组合的|,天然过滤掉括号内部的分隔符。

不同场景调用示例

XPath tokenize函数调用(你提到的tokenize场景)

直接将正则作为分隔符参数传入即可:

tokenize(你的输入字符串, '\|(?![^(]*\))')

返回的序列就是拆分后的目标结果。

JavaScript 实现

const input = "Test|Test1|Test2|(Test3|Test4)|Test5|(Test6)(Test7)|Test8";
const splitResult = input.split(/\|(?![^(]*\))/);
// 输出结果:["Test", "Test1", "Test2", "(Test3|Test4)", "Test5", "(Test6)(Test7)", "Test8"]

Python 实现

import re
input = "Test|Test1|Test2|(Test3|Test4)|Test5|(Test6)(Test7)|Test8"
split_result = re.split(r'\|(?![^(]*\))', input)
# 输出结果:['Test', 'Test1', 'Test2', '(Test3|Test4)', 'Test5', '(Test6)(Test7)', 'Test8']

注意事项

上述方案仅适用于无括号嵌套的场景,如果业务中存在多层括号嵌套(比如(Test|(Test1|Test2))),受限于正则引擎的匹配能力,需要用逐字符计数括号嵌套层数的方式处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 01:15:04