Python提取字符串第一层括号内子串的实现方法
实现Python提取字符串第一层括号子串
原有逻辑说明
你之前写的alkylrem函数通过括号层级计数的方式跳过所有括号包裹的内容,只返回括号外的字符串,核心的层级计数逻辑完全可用,不需要推倒重写。
def alkylrem(j): removed = '' paren_level = 0 for char in j: if char == '(': paren_level += 1 elif (char == ')') and paren_level: paren_level -= 1 elif not paren_level: removed += char return removed
问题解答
- 完全可以通过新增判断分支实现提取括号子串的需求,不推荐使用全局变量:全局变量会存在状态残留问题,多次调用函数时很容易返回错误结果,最优方式是直接让函数同时返回「括号外字符串」和「第一层括号内子串」两个结果,无状态副作用。
- 核心调整点:新增一个变量存储括号内内容,仅当
paren_level == 1(即刚好处于第一层括号内部,未进入更深的嵌套括号)时收集对应字符即可,嵌套括号内的内容会被完整保留在第一层子串中,不会被错误截断。
改进后代码
def process_paren_content(input_str): outer_res = '' first_level_inner = '' paren_level = 0 for char in input_str: if char == '(': paren_level += 1 continue elif char == ')' and paren_level: paren_level -= 1 continue # 拼接括号外内容 if paren_level == 0: outer_res += char # 拼接第一层括号内的内容 elif paren_level == 1: first_level_inner += char return outer_res, first_level_inner
效果示例
传入测试字符串"烷基(取代基(嵌套取代基)尾部)主链剩余部分",调用函数后:
- 括号外返回值:
"烷基主链剩余部分",和你原有函数的返回结果一致 - 第一层括号内返回值:
"取代基(嵌套取代基)尾部",完全匹配第一层括号的内容范围
如果只需要提取第一个出现的第一层括号内容、不需要收集后续平级括号的内容,只需要加一个布尔标记,在第一次遇到第一层左括号时开始收集,遇到对应的第一层右括号时停止收集即可。
内容的提问来源于stack exchange,提问作者colonialempire4
相关产品推荐
相关产品推荐

