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

正则表达式:按括号拆分字符串但排除特定前缀后的括号

拆分字符串时排除特定前缀后的括号

需要拆分包含左右括号的字符串,但要排除前面带有特定子串(如ue)的括号。示例如下:

输入字符串:

a = 'abc (xyz pqr) qwe ew (kjlk asd) ue(aad) kljl'

期望输出列表:

['abc', 'xyz pqr', 'qwe ew', 'kjlk asd', 'ue(aad)', 'kljl']

即保留ue(aad),不对其中的(aad)进行拆分。

你尝试的代码:

y = [x.strip() for x in re.split(r"[^ue()][()]", a) if x.strip()]

问题分析

你写的正则有两个明显问题:

  1. [^ue()]会匹配所有不是u、e、(、)的字符,拆分时会把括号前的正常字符(比如abc (里的空格)也吃掉,导致结果出现缺失;
  2. 逻辑上没精准覆盖“排除ue前缀后括号”的需求,没法区分普通括号和ue后的括号。

正确实现

用负向预查就能精准实现需求,正则表达式为(?<!ue)[()],完整代码如下:

import re

a = 'abc (xyz pqr) qwe ew (kjlk asd) ue(aad) kljl'
result = [x.strip() for x in re.split(r"(?<!ue)[()]", a) if x.strip()]
print(result)

正则说明

  • (?<!ue):负向零宽断言,检查当前位置的前面不是ue这个子串,只有满足这个条件的括号才会被当作分隔符;
  • [()]:匹配左括号或右括号,作为拆分的标记;
  • 最后用strip()清理拆分后元素的前后空白,再过滤掉空字符串,就能得到你要的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 08:22:16