如何按|分隔字符串且排除括号()内的|,正则匹配部分出错怎么解决?
按|拆分字符串且忽略括号内分隔符的实现方案
核心逻辑
匹配所有不在()包裹范围内的|作为分隔符,使用正向否定环视的正则实现,无需额外遍历逻辑,单层括号场景下直接可用。
可用正则表达式
\|(?![^(]*\))
该正则的匹配规则:仅匹配后面不存在「非左括号字符+右括号」组合的|,天然过滤掉括号内部的分隔符。
不同场景调用示例
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
相关产品推荐
相关产品推荐

